原文: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 主题资源替换的更多相关文章

  1. WPF ResourceDictionary 主题资源替换(一)

    当我们需要在程序中替换主题,更换另一套背景.颜色.样式时,如何在不修改资源Key值,直接替换呢? 问题&疑问 1. Key值冲突 同一ResourceDictionary中,不可以使用相同Ke ...

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

    之前的ResourceDictionary主题资源替换(一)通过加载顺序来覆盖之前的主题资源,介绍了WPF框架对ResourceDictionary资源的合并规则. 此篇介绍一种在编译期间,实现资源替 ...

  3. WPF ResourceDictionary的使用

    作用:一个应用程序中,某个窗口需要使用样式,但是样式非常多,写在一个窗口中代码分类不方便.最好Style写在专门的xaml文件中,然后引用到窗口中,就像HTML引用外部css文件一样. 初衷:就在于可 ...

  4. WPF ResourceDictionary XAML资源 c#代码 获取与遍历

    使用C#代码来获取XAML资源,除去正常的FindResource.而且是能查询到资源的对象. 说实话还是很麻烦的. 比如说我现在有一堆静态资源放在xaml的资源中,我想通过绑定的方式来获取. 好比是 ...

  5. Prism5.0新内容 What's New in Prism Library 5.0 for WPF(英汉对照版)

    Prism 5.0 includes guidance in several new areas, resulting in new code in the Prism Library for WPF ...

  6. Prism.WPF -- Prism框架使用(上)

    本文参考Prism官方示例 创建Prism项目 将App.xaml中的WPF标准Application替换为PrismApplication,移除StartupUri属性: 将App.xaml.cs中 ...

  7. Prism5.0新内容(纯汉语版)

    Prism 5.0 包含很多新东西,新的快速入门示例,新的范例,更新的文档,Prism类库代码的改变.用来解决已有问题,回应社区所提的需求.(这句话跟 What's New in Prism Libr ...

  8. WPF整理-使用ResourceDictionary管理Logical Resources

    “Logical resources may be of various types, such as brushes, geometries, styles, and templates.Placi ...

  9. 总结:WPF中ResourceDictionary资源文件的查找和遍历方法

    原文:总结:WPF中ResourceDictionary资源文件的查找和遍历方法 一.查找包含制定关键字的资源 ResourceDictionary GetThemeDictionary()     ...

随机推荐

  1. Apache PredictionIO在Docker上的搭建及使用

    1.Apache PredictionIO介绍 Apache PredictionIO 是一个孵化中的机器学习服务器,它可以为为开发人员和数据科学家创建任何机器学习任务的预测引擎.官方原文: Apac ...

  2. bzoj 2111: [ZJOI2010]Perm 排列计数 (dp+卢卡斯定理)

    bzoj 2111: [ZJOI2010]Perm 排列计数 1 ≤ N ≤ 10^6, P≤ 10^9 题意:求1~N的排列有多少种小根堆 1: #include<cstdio> 2: ...

  3. [POI2015]KIN

    题目 感觉这种题好套路啊,怎么又是这个做法 癌不过怎么没有人和我一样些写套路做法,那干脆来写个题解吧 我们考虑枚举区间的右端点,这样我们只需要考虑从\(1\)到\(i\)的最大区间就好了 由于我们选择 ...

  4. git 比较不同版本文件的差异

    Git 比较不同版本文件差异的常用命令格式: git diff 查看尚未暂存的文件更新了哪些部分 git diff filename 查看尚未暂存的某个文件更新了哪些 git diff –cached ...

  5. 在linux命令行中调试在OJ上的c++代码

    gcc & g++现在是gnu中最主要和最流行的c & c++编译器 .g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c.这时候命令换做gcc即可. 编译器是根据gcc ...

  6. springboot多数据源的配置与使用

    转自:https://www.jianshu.com/p/34730e595a8c 之前在介绍使用JdbcTemplate和Spring-data-jpa时,都使用了单数据源.在单数据源的情况下,Sp ...

  7. 【题解】洛谷P3953 [NOIP2017TG] 逛公园(记忆化搜索+SPFA)

    题目来源:洛谷P3953 思路 先用SPFA求一遍最短路 在求最短路的同时可以把所有点到终点的最短路求出来 dis数组 注意要反向SPFA  因为从起点开始可能会走到一些奇怪的路上导致时间负责度增加 ...

  8. php导出word格式数据的代码(转)

    本节内容:一个php导出文档的类 例子:<?php /*** 生成word文档的类* by www.jbxue.com*/class word{     function start()    ...

  9. vue使用iview Timeline 时间轴不显示问题

    vue Timeline 时间轴不显示渲染的效果 官网代码 <Timeline pending> <TimelineItem>发布1.0版本</TimelineItem& ...

  10. 【Oracle】Oracle安装配置、创建数据库实例及用户和连接

    https://blog.csdn.net/wudiyong22/article/details/78904361 参考资料:https://www.cnblogs.com/hoobey/p/6010 ...