WPF ResourceDictionary 主题资源替换

Posted kybs0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF ResourceDictionary 主题资源替换相关的知识,希望对你有一定的参考价值。

当我们需要在程序中替换主题,更换另一套背景、颜色、样式时,如何在不修改资源Key值,直接替换呢?

问题&疑问

 1. Key值冲突

同一ResourceDictionary中,不可以使用相同Key

技术图片

2. 资源替换

添加俩套样式,Xaml下是否可以将原有的资源(如样式)替换成新的资源?

加载顺序是否会冲突,比如俩个字典中都存有Image.Search图片资源,最终会以哪个字典中的资源为准呢

技术图片

 

ResourceDictionary的合并方案

WPF的ResourceDictionary合并时,合并的规则能解决此冲突及加载顺序问题

ResourceDictionary合并:

  1. 检查ReourceDictionary所有资源Key列表
  2. 检查ResourceDictionary.MergedDictionaries中的字典,从列表尾部遍历到表头。
  3. 按以上检查顺序,检查到相同Key值时,会以检查到的首个Key为准。即添加字典时,最后一个字典下的资源。

详细的官方文档,截图如下:

技术图片

所以,不同主题的资源,可以通过MergedDictionaries添加不同的字典,以加载顺序来覆盖之前的主题资源。

 

以上是关于WPF ResourceDictionary 主题资源替换的主要内容,如果未能解决你的问题,请参考以下文章

ResourceDictionary主题资源替换 :通过加载顺序来覆盖之前的主题资源

如何在 WPF 中禁用 Material Design 风格

WPF 如何将主题应用于使用 MVVM 动态创建的对象

WPF 在后面的代码中设置 DataTemplate 网格大小(ResourceDictionary)

xml 【WPF】ResourceDictionary中の多阶层マージ

从 Catel WPF UserControl 中的 ResourceDictionary 中绑定