微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

| 我在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文档的了解来看,它对我的​​情况没有任何影响。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。