WPF Untermenü styling
Habe ich ein ContextMenu-Stil und ein MenuItem-Stil, beide sind ordnungsgemäß in der oberen Menüleiste. Das problem ist, wenn ich ein Untermenü zu einem Menüpunkt, dann wird das Untermenü nicht richtig gestylt. Es sieht aus wie Sie können nur den Stil der menuitem-an diesem Punkt, und nicht die eigentliche sub-Menü, so dass Sie nicht ersetzen können die IsMouseOver-styling (nur es standardmäßig auf was auch immer Thema ist aktiviert, unter windows).
Ich habe gesucht und gesucht, die am nächsten Sache, die ich finden kann, ist dieses forum auf MSDN http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/69269d23-f97c-42e3-a9dd-0e7c0ba49bdd?prof=required aber es hat nicht wirklich beantworten Sie die Frage richtig entweder, wie sein Beispiel hat das gleiche problem, ich bin mit in. Jede mögliche Hilfe würde geschätzt! Vielen Dank im Voraus.
Bearbeiten:
Jay, das ist, was ich Tue. Hier finden Sie den code im UserControl.Ressourcen wie die Spitze von meinem Objekt.
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Background" Value="#0f3c5a"></Setter>
<Setter Property="Foreground" Value="White"></Setter>
<Style.Triggers>
<Trigger Property="IsHighlighted" Value="True">
<Setter Property="Background" Value="Black"></Setter>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="LightGray"></Setter>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="{x:Type ContextMenu}">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContextMenu}">
<!--Here is where you change the border thickness to zero on the menu-->
<Border BorderThickness="0" x:Name="Border" >
<StackPanel ClipToBounds="True" Orientation="Vertical"
IsItemsHost="True"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Border" Property="Background" Value="#5082a4" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
und dann sowas für das Menü
<ContextMenu Closed="ContextMenu_Closed" >
<MenuItem Command="k:Window1.NewCommand" >
<MenuItem Command="k:Window1.DeleteCommand"/>
</MenuItem>
...
Alles auf die NewCommand-layer gestaltet ist richtig, geht innerhalb NewCommand anzeigen DeleteCommand MenuItem selbst gestaltet ist richtig, aber das eigentliche Menü ist standardmäßig auf die Windows-Thema styling und ich sehe keine Möglichkeit mehr überschreiben, dass so weit. Der wichtigste Teil ist, um die IsMouseOver der Untermenü ' s zu halten die gleichen look and feel wie die Hauptmenü-Struktur.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie versprochen, hier der code. Vielen Dank für deine Hilfe, Jay, führe mich in die richtige Richtung, um endlich eine Antwort zu finden auf MSDN http://msdn.microsoft.com/en-us/library/ms752296.aspx MenuItem und ContextMenu-Steuerelement das styling für das Basis-Menü, und die anderen beiden sind für die Untermenüpunkte. Jay ist Weg, vielleicht funktioniert haben, aber ich konnte es nicht zu leider. Das funktioniert perfekt, obwohl, und wahrscheinlich viel mehr Kontrolle über die Untermenüs styling.
Wie bewerben Sie Ihre Stile?
In der Regel, wenn Sie definieren, wie der Stil "high" oder "äußeren" element Ressourcen, und geben es keinen Schlüssel, es gilt für alle Elemente der Ziel-Typ weiter unten.
Sind Sie dabei und sehen zu unerwartetem Verhalten, oder versuchen Sie zu definieren/anwenden von Stilen in-line auf jeder Ebene?
Bearbeiten 1
Blick auf Ihre XAML, ich denke, das Problem ist, dass Ihr styling
ContextMenu
, aber Menüs unten den TypMenu
. Das erste, was ich versuchen würde, ist einfach nur dieTargetType
Attribut für dieStyle
zuMenu
. Sehen, wenn Sie angewendet wird auf allen Ebenen. Wenn nicht, würde ich es wieder ändern und fügen Sie eine weitereStyle
targetingMenu
und sehen, ob , dass bekommt man angewendet, um das Untermenü aufzurufen.edit 2
Okay, ich denke ich habe deine Antwort. Das Untermenü ist eigentlich ein
MenuItem
, das ist offensichtlich, wenn man die XAML statt das Ergebnis. Die Vorlage und styling, dass Sie Einstellung auf dieContextMenu
muss auch festgelegt werden, auf jedemMenuItem
ein Untermenü. Ich versuchte es und schuf einen Stil, der aufMenuItem
mit einer steuerelementvorlage und Auslöser fürIsMouseOver
und es schien zu tun, was Sie versuchen.Nicht duplizieren, Vorlagen, du bist besser dran erstellen mit beiden PART_Popup und Pfeil für das Untermenü, sondern verstecken sich die Fehler, bis Sie ausgelöst mit Rolle SubmenuHeader.