wpf - 为什么 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}}"/>
你知道为什么它在第一种情况下不起作用吗?
解决方案
将您的样式替换为:
<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" TargetType="Separator" BasedOn="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
请参阅分隔符类的 MSDN 文档:
当您创建带有分隔符的菜单时,控件会自动应用由 MenuItem.SeparatorStyleKey 属性标识的样式。样式被放置在资源字典中,并通过它们的键进行搜索。要更改菜单内分隔符的样式,您必须使用 MenuItem.SeparatorStyleKey 属性来创建新样式。
因此,分隔符的资源样式将从控件中覆盖,并且如果将其直接放入控件中,则不会。
推荐阅读
- lua - “尝试使用 TweenService() 时,函数 Create 不是“UnionOperation”的成员
- ionic-framework - 在Android上点击通知时应用程序不显示
- sql - 如何检索已删除的表?
- javascript - 没有 Base64 的音频小书签
- linux - 将旧域的每个页面重定向到新域上的相同页面 URL
- wordpress - 迭代 Wordpress 自定义字段?
- ruby-on-rails - 如何使用 ActiveRecord 按多个类别过滤产品?
- azure - azure 和 S2S VPN 中的 RRAS 服务器
- android - 无侧边框的表格
- java - 为什么我的 IE 浏览器使用 Selenium 和 Cucumber 启动了两次?