2009-06-08 27 views
3

Я хотел бы восстановить 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", так что оба шаблона управления являются «чистыми».

Как перенести элемент стиля из второго 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> 
Смежные вопросы