WPF sous-menu style
J'ai un ContextMenu style et un MenuItem de style, qui sont tous deux travailler correctement sur le menu du haut. Le problème est que si j'ajoute un sous-menu à un élément du menu, puis le sous-menu n'est pas de style correctement. Il semble que vous ne pouvez style de la menuitem à ce point, et non le sous-menu de sorte que vous ne pouvez pas remplacer la IsMouseOver style (juste par défaut, quel que soit le thème est activé sur windows).
J'ai cherché et cherché, la chose la plus proche que je peux trouver ce forum est-il post sur MSDN http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/69269d23-f97c-42e3-a9dd-0e7c0ba49bdd?prof=required mais il ne fait pas de répondre correctement à la question, que son exemple a le même problème, je suis en cours d'exécution. Toute aide serait appréciée! Merci à l'avance.
Edit:
Jay, c'est ce que je fais. Voici un peu de code, dans UserControl.Les ressources comme le haut de mon objet.
<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>
et puis quelque chose comme ça pour le menu
<ContextMenu Closed="ContextMenu_Closed" >
<MenuItem Command="k:Window1.NewCommand" >
<MenuItem Command="k:Window1.DeleteCommand"/>
</MenuItem>
...
Tout sur le NewCommand couche est de style correctement, aller à l'intérieur NewCommand pour afficher DeleteCommand la MenuItem lui-même est de style correctement, mais le menu est défaut le thème des Fenêtres de style et je ne vois pas de moyen plus écrasant que jusqu'à présent. La partie la plus importante est d'obtenir le IsMouseOver de sous-menu à maintenir le même look and feel que le menu principal de la structure.
OriginalL'auteur user64718 | 2010-08-02
Vous devez vous connecter pour publier un commentaire.
Comme promis, voici le code. Merci pour votre aide Jay, conduis-moi dans la bonne direction pour enfin trouver une réponse sur MSDN http://msdn.microsoft.com/en-us/library/ms752296.aspx MenuItem et contrôle ContextMenu le style pour le menu de base, et les deux autres sont pour les éléments de sous-menu. Jay façon peut-être travaillé, mais je ne pouvais pas le faire malheureusement. Cela fonctionne parfaitement bien, et probablement permet beaucoup plus de contrôle sur les sous-menus de style.
J'ai encore 53 minutes, jusqu'à Stackoverflow me permet de marquer ma propre réponse 😛
OriginalL'auteur user64718
Comment appliquez-vous vos modèles?
Généralement si vous définissez comme le style en "haut" ou "externe" de l'élément de Ressources, et de donner il pas la clé, il va s'appliquer à tous les éléments de la cible type ci-dessous.
Vous faites ça et de voir le comportement inattendu, ou êtes-vous en train de définir et à appliquer des styles en-ligne, à chaque niveau?
edit 1
Regardant votre XAML, je pense que le problème, c'est que vous êtes style
ContextMenu
, mais les menus ci-dessous qui sont de typeMenu
. La première chose que je voudrais faire est de simplement changer leTargetType
de l'attribut de l'Style
àMenu
. Voir si cela s'applique à tous les niveaux. Si non, j'aimerais le changer en arrière et ajouter un autreStyle
ciblageMenu
et voir si que l'une est appliquée au sous-menu.edit 2
D'accord, je pense que j'ai votre réponse. Le sous-menu est en fait un
MenuItem
, ce qui est évident quand on regarde le code XAML à la place du résultat. Le modèle et le style que vous êtes de réglage sur leContextMenu
doit également être réglé sur n'importe quelMenuItem
qui est un sous-menu. Je l'ai essayé et a créé un style qui cibleMenuItem
avec un modèle de contrôle et de déclenchement pourIsMouseOver
et il est apparu à faire ce que vous essayez.Mise à jour de réponse en réponse à votre montage.
Jay, qui n'a pas de résoudre quoi que ce soit, le sous-menu n'avez pas le style. C'est un très étrange problème.
Une autre mise à jour.
Jay, pas vraiment sûr de ce que vous avez à faire votre travail, mais quand j'ai essayé qu'il n'a rien fait. Cependant, votre post m'a aidé à trouver la bonne réponse, enfin! Je vais poster le code dans une nouvelle réponse peu de temps, il suffit de nettoyer certains.
OriginalL'auteur Jay
De ne pas dupliquer les modèles, vous êtes mieux de la création d'un deux PART_Popup et la flèche pour dérouler le menu, mais de cacher l'erreur jusqu'à ce que vous êtes déclenchée avec Rôle SubmenuHeader.
OriginalL'auteur MikNik