You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中ResourceDictionary合并后样式引用Brush失效问题咨询

WPF 自定义控件样式资源字典合并不生效问题解答

核心原因

你的问题本质是WPF的StaticResource资源查找逻辑限制:StaticResource是编译期完成资源查找的,只会在当前资源字典(以及该字典自身合并的其他字典)范围内查找资源,不会向上检索后续父级合并字典。也就是你在Generic.xaml里合并的Brushes字典,对于SHButtonStyle.xaml来说属于父级合并上下文,编译期无法被SHButtonStyle里的StaticResource访问到。

解决方案

你目前在SHButtonStyle.xaml中额外合并Brushes字典的处理方式是完全合规的,不存在错误。如果希望所有资源统一在Generic.xaml中管理,可采用以下方案:

  1. 将SHButtonStyle.xaml中引用资源的标记从{StaticResource Background}修改为{DynamicResource Background}:DynamicResource是运行期查找资源,可以检索到父级合并字典中的资源。
  2. 调整Generic.xaml中合并字典的顺序,必须先合并Brushes字典,再合并SHButtonStyle字典,资源查找会按合并顺序优先匹配先引入的资源:
<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/TestCustomControl;component/Brushes.xaml"/>
    <ResourceDictionary Source="/TestCustomControl;component/SHButtonStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>

注意事项

建议给自定义资源添加专属前缀避免命名冲突,你当前使用的Background作为资源键过于通用,很容易和系统内置资源键或其他自定义资源键冲突,可修改为比如SHButton_Background这类带业务前缀的名称。

内容的提问来源于stack exchange,提问作者StephenH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:45:01