ContextMenu selber stylen

  • WPF MVVM
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von kafffee.

    ContextMenu selber stylen

    Hallo und Guten Abend :-),

    Ich möchte ein ContextMenu einer ListBox selber stylen und bin auch schon sehr weit gekommen. Bloss diesen hässlichen "Platzhalter" für das Icon links im KontextMenu-Item krieg ich irgendwie nicht ausgeblendet. So sieht mein XAML aus:

    XML-Quellcode

    1. <ListBox.ContextMenu>
    2. <ContextMenu.ItemTemplate>
    3. <DataTemplate>
    4. <Grid>
    5. <Grid.ColumnDefinitions>
    6. <ColumnDefinition Width="3*"/>
    7. <ColumnDefinition Width="3*"/>
    8. <ColumnDefinition Width="94*"/>
    9. </Grid.ColumnDefinitions>
    10. <TextBlock Text="alle Musiktitel" Grid.Column="2" TextTrimming="CharacterEllipsis" Foreground="{DynamicResource VordergrundfarbeBrush}" FontSize="30"/>
    11. <Border Name="brdAlleMusiktitelZuPlaylistZufuegen" Height="30" Grid.Column="0" Style="{DynamicResource Navigationsbuttons}" ToolTip="Füge alle Musiktitel der Playlist des gewählten Plattendecks zu..." HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    12. <Border.InputBindings>
    13. <MouseBinding MouseAction="LeftClick" Command="{Binding AddeAlleMusiktitel}"/>
    14. </Border.InputBindings>
    15. <Viewbox Stretch="Uniform">
    16. <Path Margin="4" Stretch="Uniform" Fill="{DynamicResource VordergrundfarbeBrush}" Data="xxx"/>
    17. </Viewbox>
    18. </Border>
    19. <Border Name="brdAlleMusiktitelAbspielen" Height="30" Grid.Column="1" Style="{DynamicResource Navigationsbuttons}" ToolTip="Spiele alle Musiktitel auf dem gewählten Plattendeck ab...">
    20. <Border.InputBindings>
    21. <MouseBinding MouseAction="LeftClick" Command="{Binding SpieleAlleMusiktitel}"/>
    22. </Border.InputBindings>
    23. <Viewbox Stretch="Uniform">
    24. <Path Margin="4" Stretch="Uniform" Fill="{DynamicResource VordergrundfarbeBrush}" Data="yyy"/>
    25. </Viewbox>
    26. </Border>
    27. </Grid>
    28. </DataTemplate>
    29. </ContextMenu.ItemTemplate>
    30. </ContextMenu>
    31. </ListBox.ContextMenu>


    Und in meiner Application.xaml:

    XML-Quellcode

    1. <Style TargetType="{x:Type ContextMenu}">
    2. <Setter Property="ItemsPanel" Value="{StaticResource KontextMenueItem}"/>
    3. </Style>
    4. <Style TargetType="{x:Type MenuItem}">
    5. <Setter Property="ItemsPanel" Value="{StaticResource KontextMenueItem}"/>
    6. </Style>
    7. <ItemsPanelTemplate x:Key="KontextMenueItem">
    8. -<StackPanel/>
    9. </ItemsPanelTemplate>




    Da wird einfach ein "schwarzes Loch" im ContextMenu angezeigt.

    Eigentlich müsste das doch gehen, ich hab den Code so auf stackoverflow gefunden. Weiss jemand wo der Fehler liegt? Ich hab mich jetzt schon 15 Mal vergewissert, dass es so eigentlich gehen müsste. Oder aber der Code ist an sich komplett falsch...
    Hab so ziemlich alles hier ausprobiert...
    Es muss doch noch einen anderen Weg geben als das komplette Dictionary zu verändern gleich...
    Kafffee jetzt muss ich mal ein wenig schimpfen mit dir. Wenn ich was nutzen will, lerne ich wie das geht. Kommt auch mal vor das ich mir anderen Source ansehe, aber dann schaue ich auch noch mal bei MS vorbei, ertsmal schauen was hat dieses XYZ für Properties, Methoden, welche Konstruktore stehen zu verfügung..... Einfach nur von SO kopieren da hast du NULL gelernt auch wenns dann funktioniert, du kannst es an anderer Stelle nicht anwenden, weil NULL Ahnung. Hättest du irgendwann auch nur ein einziges mal bei MS wegen Style+Templates bzw. Stile und Vorlagen gesucht, wüsstest du das es für alle(oder fast alle) Controls beispiele gibt und man kann nachlesen was da wofür ist. Klar ist fragen einfacher als lernen, nur wie lange machen das die Leute mit? Ich vermute jetzt jedenfalls stark das du die Doku wohl scheust wie der Teufel das Weihwasser. Das meine ich nicht böse, aber gesagt werden musste das mal.

    Siehe ContextMenu-Stile und -Vorlagen: Lies aber besser auf Englisch, die Übersetzung ist meist für'n.....
    learn.microsoft.com/de-de/dotn…w=netframeworkdesktop-4.8
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DTF“ ()

    Hab mir ja nicht nur den Code von stackoverflow angeschaut und ich war wohl auf den Seiten der MS Docs bloss nicht auf der die du verlinkt hast. Und in der Tat hatte ich es so wie auf deiner Seite beschrieben, schon instinktiv versucht gehabt (weil Control Template - sagt der Name ja schon selbst), nur hatte ich das nicht in den Ressourcen sondern im Control selbst eingebunden, weil ich dachte, dass wenn ich da Command Bindings drin habe (also in der Application.xaml, dass die Bindung nicht funktioniert....)Über diesen speziellen Sachverhalt hab ich nämlich nichts gefunden in den Docs... Aber vielleicht war ich einfach auch nicht gründlich genug...

    naja da bin ich jetzt wieder ein Stück klüger...

    Danke jedenfalls für den Hinweis.

    DTF schrieb:

    die Übersetzung ist meist für'n.....


    Da bin ich ganz mit dir...
    Du hast in die Doku geschaut? Dann war ich evtl. ein wenig voreilig, Sorry. Ich kann dir jetzt nicht genau sagen wie ich da gelandet bin, aber irgendwo war da ein Link(zu solchen Vorlagen) bei MS als ich wegen Style suchte und gelesen hab. Immer zu recherchieren ist trotzdem wichtig, erst wenn man weiß was dat ist, kann man es richtig einsetzen.

    Du kannst aber auch von den Standard-Controls die Templates bekommen und bearbeiten. Siehe bei SO 8o
    stackoverflow.com/questions/88…template-in-visual-studio

    Könnte dir eines Tages von nutzen sein.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    DTF schrieb:

    Dann war ich evtl. ein wenig voreilig, Sorry.

    Kein Problem so werden wir Kumpels. Besser man sagt immer wo der Schuh drückt...


    DTF schrieb:

    Du kannst aber auch von den Standard-Controls die Templates bekommen und bearbeiten.

    Ja auch das wusste ich schon ;) War damals als ich im Sommer 2021 als ich mit WPF angefangen hab eins der ersten Sachen die ich drüber gelernt hab...:

    kafffee schrieb:

    Es muss doch noch einen anderen Weg geben als das komplette Dictionary zu verändern gleich...

    Deswegen schrieb ich das ja...

    Naja egal, jetzt gehts ab in die Haya... Hab jetzt das ganze Wochenende durchprogrammiert und mein Projekt ist fast fertig. Noch ein zwei Funktionen implementieren, gründlich durchtesten... Drei Bugs sind mir noch bekannt, einer davon hat mit Threading zu tun, der zweite wahrscheinlich auch, da hängt sich das Programm ohne Fehlermeldung auf... Obwohls früher schon funktioniert hat... das wird nochmal interessant bzw. ne Herausforderung... Und der dritte, naja, da muss ich auch noch mal genau nachschauen.

    In diesem Sinne :)