WPF右键菜单样式结构

3
我想重新设计一个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" 样式内部,以便两个控件模板都是 "干净的"。 我该如何将样式元素移出第二个ControlTemplate
1个回答

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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接