2009-06-08 70 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>