当控件的Type具有全局样式时,如何在WPF中为我的应用程序的一部分更改控件的样式?

时间:2011-06-15 07:27:40

标签: wpf xaml styling templating

我在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),我无法摆脱我的“全球”风格。当地人只是被忽略了。

我该怎么办?

2 个答案:

答案 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文档的理解,它不应该对我的情况产生任何影响......我将不得不尝试理解我错过的那些)