为什么资源样式不应用于分隔符,而直接应用于样式呢?

时间:2019-11-22 08:32:44

标签: wpf xaml

我喜欢@CodeNaked的this solution,但由于某种原因,我很难将其应用于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}}"/>

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

1 个答案:

答案 0 :(得分:2)

替换您的样式:

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

有关Separator Class的信息,请参见MSDN文档:

  

使用分隔符创建菜单时,控件会自动   应用由MenuItem.SeparatorStyleKey标识的Style   属性。样式放置在资源词典中,   通过其键进行搜索。更改内部分隔符的样式   菜单,您必须使用MenuItem.SeparatorStyleKey属性创建   您的新样式。

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