2009-06-08 68 views
3

我想restyle ContextMenu,但我有一个关于如何构建我的Xaml的问题。WPF ContextMenu风格结构

在我的应用程序资源,我有这样的事情:

<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> 

这似乎做工精细,上下文菜单与ContextMenuTemplate风格有风格的菜单项,和其他的上下文菜单不受影响,而不必设置任何MenuItems明确风格。

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

但是,我不喜欢有那个ControlTemplate.Resources部分。我宁愿让它在x:Key="RadialContextMenu"风格的内部,以便两个控件模板都是“干净的”。

如何将Style元素移出第二个ControlTemplate

回答

3

试试这个:

<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>