在子项上设置ContextMenu的样式

时间:2010-03-12 21:34:12

标签: wpf wpf-controls

我为MenuItem和ContextMenu创建了一个自定义样式和模板,对于我的第一个级别,它运行得很好,但每当我添加一个SubMenu项时,ContextMenu的样式将恢复为默认样式。如何确保该项目使用我的自定义样式?我也尝试使用&lt ;; Style TargetType =“ContextMenu”Key =“{x:Type ContextMenu}”语法,它似乎也没有覆盖它。

1 个答案:

答案 0 :(得分:2)

问题是该样式正在应用于ContextMenu的子菜单项。由于它们本身就是ItemsControls,因此孙子们从MenuItem样式中获取ItemContainerStyle。我建议将MenuItem样式拉出到一个单独的资源中,然后像这样使用它:

<Style x:Key="menuItemStyle" TargetType="{x:Type MenuItem}">
   ...
</Style>

<Style TargetType="{x:Type ContextMenu}">
    <Setter Property="ItemContainerStyle">
        <Setter.Value>
            <Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource menuItemStyle}">
                <Setter Property="ItemContainerStyle" Value="{StaticResource menuItemStyle}" />
            </Style>
        </Setter.Value>
    </Setter>
</Style>