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