我在App.xaml中设置了Menu / ContextMenu / MenuItem控件的样式,以便这些样式适用于我的所有应用。
这样定义(例如使用MenuItem):
<Style TargetType="{x:Type MenuItem}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<!-- more setters -->
</Style>
这很有效。
现在,我有一个RichTextBox,我希望它的ContextMenu和MenuItems有不同的风格。
所以我写道:
<RichTextBox>
<RichTextBox.ContextMenu>
<ContextMenu>
<MenuItem Command="Undo" Style="{StaticResource menuItem}">Toto</MenuItem>
<MenuItem Command="Redo"/>
<Separator/>
<MenuItem Command="Cut"/>
<MenuItem Command="Copy"/>
<MenuItem Command="Paste"/>
<MenuItem Command="SelectAll"/>
</ContextMenu>
</RichTextBox.ContextMenu>
<!-- and here the RichTextBox's conent -->
</RichTextBox>
现在我想弄清楚我可以把我的新风格放在哪里......问题是:我无法弄清楚:无论在哪里以及我如何添加它(RichTextBox上的静态资源,或者ContextMenu,带有显式Key或只是targetType),我无法摆脱我的“全球”风格。当地人只是被忽略了。
我该怎么办?
答案 0 :(得分:1)
尝试:
<RichTextBox.Resources>
<Style x:Key="menuItem" TargetType="{x:Type MenuItem}">
<Setter Property="Foreground" Value="Blue"/>
</Style>
</RichTextBox.Resources>
答案 1 :(得分:0)
最后,我选择了ContextMenu的资源,这甚至在每个menuItem中保存了“Style = ...”。
<RichTextBox.ContextMenu>
<ContextMenu>
<ContextMenu.Resources>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Background" Value="{StaticResource MenuItemBackgroundBrush}"/>
</Style>
</ContextMenu.Resources>
</ContextMenu>
</RichTextBox.ContextMenu>
我想我从一开始就拥有它,但不知何故忘记了OverridesDefaultStyle = true这似乎是个问题。 (虽然根据我对MS文档的理解,它不应该对我的情况产生任何影响......我将不得不尝试理解我错过的那些)