之前的ResourceDictionary主题资源替换(一)通过加载顺序来覆盖之前的主题资源,介绍了WPF框架对ResourceDictionary资源的合并规则。

此篇介绍一种在编译期间,实现资源替换的方案

前言

如下图,项目中存在俩个主题资源字典,我们想通过配置一键修改项目的主题。

首先,我们默认使用的是灰色主题

添加项目属性文件

新建文件Themes.props(主题设置),

并添加当前主题版本:

1 <Project>
2   <PropertyGroup>
3     <Theme>Theme-Red</Theme>
4   </PropertyGroup>
5 </Project>

如上,切换当前版本为红色主题

修改项目csproject

引入主题配置文件:

  <Import Project="..\Themes.props" Condition="Exists('..\Themes.props')" />

添加资源替换:

在编译前,判断当前主题,如果为红色主题,则替换;

  • 将项目中的文件Theme-Normal.xaml、Theme-Red.xaml全部删除(如果Theme-Red.xaml没有添加到项目中,是以本地文件存在,则不需要此删除步骤)
  • 将Theme-Red.xaml伪装为,当前程序资源中的Theme-Normal.xaml
 1   <Target Name="ReplaceTheme" BeforeTargets="BeforeBuild" Condition="'$(Theme)' == 'Theme-Red'">
 2     <ItemGroup>
 3       <Page Remove="Theme-Normal.xaml" />
 4       <Page Remove="Theme-Red.xaml" />
 5       <Page Include="Theme-Red.xaml">
 6         <Generator>MSBuild:Compile</Generator>
 7         <Link>Theme-Normal.xaml</Link>
 8       </Page>
 9     </ItemGroup>
10   </Target>

替换后的主题色:

需要注意的坑

此方案,需要资源字典中的键值匹配对应,如果缺失了某个样式等资源,后续可能会有意想不到的异常哦~

如何规避?

可以下载资源字典修复工具,Github地址:ResourceIntegrityCheck

工具会将缺失的资源,从另一份资源字典中复制到此资源文件中。所以修复完成,提交代码前可以确认下,资源是否匹配当前主题。

转载于:https://www.cnblogs.com/kybs0/p/10731416.html

ResourceDictionary主题资源替换(二) :编译期间,替换主题资源相关推荐

  1. 96微信编辑器如何将样式中的二维码替换成自己的?

    现在我们编辑公众号时候,都会在后面放上公众号的二维码,引导客户识别关注.96微信编辑器上也有这样的功能,可以放很多个性样式的二维码.但是怎么替换成自己的二维码呢?这里教给大家一些. 一.在微信公众平台 ...

  2. Android源码编译及替换成自己编译的linux内核

    /*************************************************************************************************** ...

  3. java中unknown source,java - 对于 提示信息为 unknown source的解决办法: jdk 替换jre, 编译时加上debug=true...

    java - 对于 提示信息为 unknown source的解决办法: jdk 替换jre, 编译时加上debug=true 2017-08-09 10:43 访问量: 4466 分类: 技术 昨天 ...

  4. [GO语言基础] 二.编译运行、语法规范、注释转义及API标准库知识普及

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了什么是GO语言 ...

  5. linux里面查找替换命令,LINUX 查找替换命令 总结

    find /var/ -name "*.php" > /home/tmp 在/var/目录下查找 所有以.php后缀结尾的文件  结果很多,就 > 输出结果到/home ...

  6. 自定义异常类: 运行期间跟编译期间的区别

    1.自定义异常一: 继承RuntmeExcepyion,即运行期间异常;         由于我们自定义的是运行期间的异常,我们抛出异常,程序始终不作处理,程序编译的时候不会报错,但是运行的时候会报错 ...

  7. 【Android 安全】DEX 加密 ( Application 替换 | 创建用户自定义 Application | 替换 ContextImpl 对象的 mOuterContext 成员 )

    文章目录 一.创建用户自定义 Application 二.替换 ContextImpl 对象的 mOuterContext 成员 dex 解密时 , 需要将 代理 Application 替换为 真实 ...

  8. vi交互式批量替换 vi批量替换 vi查找和替换

    vi中如何实现批量替换? 举个例子啊: 将文件tihuan(假设此文本中字符a)中的所有字符a换成字符w,其命令为: 1.vi tihuan 2.按esc键 3.按shift+: 4.在:后输入    ...

  9. java字符串反转及替换_字符串的替换(str_replace)

    php字符串与字符替换函数 在php教程替换字符效率最高也是最简单字符替换函数str_replace($arr1,$arr2,$str) 实例一 str_replace("iwind&quo ...

最新文章

  1. python开源商城_Leaf - 一个开发友好、功能完备的开源微信商城框架
  2. 基于RNN的NLP机器翻译深度学习课程 | 附实战代码
  3. 项目使用mysql接收emoji表情
  4. 基本的Socket通信
  5. Jmeter跨线程组传递参数
  6. 解决pytorch训练的过程中内存一直增加的问题
  7. 机器学习—模型超参数调优之网格搜索与随机搜索
  8. 五十位名嘴用文字悼念心中永远的榜样罗京
  9. unity 3D打不开已建项目或新建项目
  10. BUAA 数据结构总结——大作业(文本摘要生成)
  11. python3 分割list
  12. 「ことから」と「ことだから」
  13. jmeter压测学习28-监听器之用表格察看结果(View Results in Table)
  14. 尚硅谷web前端工程师1000集学习笔记11
  15. 7-9 7-10 sdut-C语言实验- 排序
  16. 【论文分享】图嵌入恶意域名检测算法:Malicious Domain Detection via Domain Relationship and Graph Models
  17. MSSQL和MYSQL数据库降权
  18. 对于单链表结构体中LinkList以及Lnode,*LinkList两种不同定义方式的个人理解
  19. 自动部署静态html,手把手教你用 GitHub 来部署静态网页
  20. 表格的编辑插件 editable.js

热门文章

  1. python医学数据挖掘_GitHub - SSSzhangSSS/Python-Data-mining-Tutorial: Python数据挖掘教程
  2. idea全局搜索搜不全的BUG
  3. java 抽象类构造函数_抽象类可以有构造函数吗?
  4. ubuntu mysql 防火墙_mysql、ubuntu系统防火墙常规操作
  5. 【HDU - 1080】Human Gene Functions(dp,可编辑距离类问题)
  6. 【牛客 - 272D】Where are you(Tarjan求桥)
  7. *【CodeForces - 791B】Bear and Friendship Condition (图论,判断完全图,dfs乱搞或带权并查集)
  8. github怎么切换到gitee_AOSP-RISCV 的开源仓库在 Gitee 上新建了镜像
  9. 级差公排php如何_什么是专业级差?专业级差怎么安排专业?
  10. 实验一熟悉matlab环境,数字信号处理报告实验一:熟悉MATLAB环境.doc