2010-03-12 4 views
1

J'ai créé un style et un modèle personnalisés pour MenuItem et ContextMenu, et pour mon premier niveau, cela fonctionne très bien, mais chaque fois que j'ajoute un élément SubMenu, le style de ce ContextMenu revient à la valeur par défaut style. Comment puis-je m'assurer que cet objet utilise mon style personnalisé? J'ai également essayé d'utiliser la syntaxe <; Style TargetType = "ContextMenu" Key = "{x: Type ContextMenu}", et il ne semble pas non plus la surcharger.Définition du style de ContextMenu sur les sous-éléments

Répondre

2

Le problème est que le style est appliqué aux éléments du menu enfant du ContextMenu. Comme ils sont eux-mêmes ItemsControls, les petits-enfants récupèrent le ItemContainerStyle du style MenuItem. Je suggère d'extraire le style MenuItem dans une ressource distincte, puis de l'utiliser comme suit:

<Style x:Key="menuItemStyle" TargetType="{x:Type MenuItem}"> 
    ... 
</Style> 

<Style TargetType="{x:Type ContextMenu}"> 
    <Setter Property="ItemContainerStyle"> 
     <Setter.Value> 
      <Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource menuItemStyle}"> 
       <Setter Property="ItemContainerStyle" Value="{StaticResource menuItemStyle}" /> 
      </Style> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

Salut Abe, pouvez-vous également consulter une question connexe? http://stackoverflow.com/questions/4430807/prevent-itemcontainerstyle-overriding-already-set-style. Ça va être génial, merci! – Dr1Ku

Questions connexes