2009-06-08 5 views
3

Je voudrais redéfinir un ContextMenu, mais j'ai une question sur la façon de structurer mon Xaml.WPF ContextMenu Structure de style

Dans mes ressources d'application, j'ai quelque chose comme ceci:

<ControlTemplate TargetType="MenuItem" x:Key="MenuItemTemplate"> 
    ... 
</ControlTemplate> 

<ControlTemplate TargetType="ContextMenu" x:Key="ContextMenuTemplate"> 
    <ControlTemplate.Resources> 
     <Style TargetType="{x:Type MenuItem}"> 
      <Setter Property="Template" Value="{StaticResource MenuItemTemplate}" /> 
     </Style> 
    </ControlTemplate.Resources> 

    ...  

</ControlTemplate> 

<Style TargetType="{x:Type ContextMenu}" x:Key="RadialContextMenu"> 
    <Setter Property="Template" Value="{StaticResource ContextMenuTemplate}" /> 
</Style> 

Cela semble fonctionner correctement, les menus contextuels avec le style ContextMenuTemplate styler éléments de menu et d'autres menus contextuels ne sont pas affectés, sans avoir à mettre un style explicitement sur tout MenuItems.

<ContextMenu x:Name="menu" Style="{StaticResource RadialContextMenu}"> 
    <MenuItem Header="Foo"/> 
    <MenuItem Header="Bar"/> 
</ContextMenu> 

Cependant, je n'aime pas avoir cette section ControlTemplate.Resources. Je préfère l'avoir par exemple dans le style x:Key="RadialContextMenu", de sorte que les deux modèles de contrôle soient "propres".

Comment puis-je déplacer l'élément Style de la seconde ControlTemplate?

Répondre

3

Essayez ceci:

<Style TargetType="{x:Type ContextMenu}" x:Key="RadialContextMenu"> 
    <Setter Property="ItemContainerStyle"> 
     <Setter.Value> 
      <Style TargetType="{x:Type MenuItem}"> 
       <Setter Property="Template" Value="{StaticResource MenuItemTemplate}" /> 
      </Style> 
     </Setter.Value> 
    </Setter> 
</Style>