WPF自定义ContextMenu和MenuItem出现OverridesDefaultStyle错误如何解决?
问题根因
这个错误是因为你在CustomizableContextMenuStyle和CustomizableMenuItemStyle的样式定义中,设置了OverridesDefaultStyle="True"的属性。WPF的默认样式(即Generic.xaml中TargetType匹配控件类型的无Key样式)禁止直接设置OverridesDefaultStyle属性,普通控件因为逻辑树渲染路径不同没有触发校验,但ContextMenu、MenuItem属于弹出式元素,样式作用域校验更严格,所以抛出该异常。
最简解决方案(不需要删除DefaultStyleKeyProperty覆写逻辑)
你只需要调整OverridesDefaultStyle的设置位置即可,有两种可选方案:
- 方案1:将属性从样式移到控件构造函数
在CustomizableContextMenu和CustomizableMenuItem的实例构造函数中添加属性赋值,同时删除对应样式文件中OverridesDefaultStyle的Setter即可:public CustomizableContextMenu() { OverridesDefaultStyle = true; } - 方案2:直接删除样式中的
OverridesDefaultStyle设置
你已经通过覆写DefaultStyleKeyProperty指定了自定义默认样式,不需要额外设置OverridesDefaultStyle也能生效,直接删除样式里的这行Setter即可解决报错。
额外说明
你当前基于Generic.xaml的控件库默认样式实现是WPF自定义控件的标准规范,完全不需要改用页面显式引用样式的传统方案,调整完成后所有控件的逻辑都能保持统一。
内容的提问来源于stack exchange,提问作者CHKAM
相关产品推荐
相关产品推荐

