首页 > 解决方案 > 为什么 Resource 样式不适用于 Separator 而是直接应用的样式作品?

问题描述

我喜欢@CodeNaked 的这个解决方案Menu,但不知何故,我很难将它应用于分隔符。它不适用于Style我在我的Resources.

这是我的代码:

<Menu>
    <Menu.Resources>
        <Style TargetType="MenuItem">
            <Setter Property="Padding" Value="0,0,0,0"/>
        </Style>
        <Style TargetType="Separator" BasedOn="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
    </Menu.Resources>

    <MenuItem Header="Foo"></MenuItem>
    <Separator/>
    <MenuItem Header="Bar"></MenuItem>
</Menu>

Style如果我在上明确设置Separator,它可以工作。

<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}"/>

你知道为什么它在第一种情况下不起作用吗?

标签: wpfxaml

解决方案


将您的样式替换为:

<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" TargetType="Separator" BasedOn="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />

请参阅分隔符类的 MSDN 文档:

当您创建带有分隔符的菜单时,控件会自动应用由 MenuItem.SeparatorStyleKey 属性标识的样式。样式被放置在资源字典中,并通过它们的键进行搜索。要更改菜单内分隔符的样式,您必须使用 MenuItem.SeparatorStyleKey 属性来创建新样式。

因此,分隔符的资源样式将从控件中覆盖,并且如果将其直接放入控件中,则不会。


推荐阅读