WPF ContextMenu样式结构

时间:2009-06-08 15:10:34

标签: wpf styles contextmenu menuitem

我想重温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

1 个答案:

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