问题描述
|
我在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),我无法摆脱\“ Global \”样式。而本地的只是被忽略了。
我该如何进行?
解决方法
尝试:
<RichTextBox.Resources>
<Style x:Key=\"menuItem\" TargetType=\"{x:Type MenuItem}\">
<Setter Property=\"Foreground\" Value=\"Blue\"/>
</Style>
</RichTextBox.Resources>
, 最后,我选择了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文档的了解来看,它对我的情况没有任何影响。