我想重温ContextMenu
,但我对如何构建我的Xaml有疑问。
在我的应用程序资源中,我有类似的东西:
<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
?
答案 0 :(得分: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>