ResourceDictionary主题资源替换(二) :编译期间,替换主题资源
之前的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主题资源替换(二) :编译期间,替换主题资源相关推荐
- 96微信编辑器如何将样式中的二维码替换成自己的?
现在我们编辑公众号时候,都会在后面放上公众号的二维码,引导客户识别关注.96微信编辑器上也有这样的功能,可以放很多个性样式的二维码.但是怎么替换成自己的二维码呢?这里教给大家一些. 一.在微信公众平台 ...
- Android源码编译及替换成自己编译的linux内核
/*************************************************************************************************** ...
- java中unknown source,java - 对于 提示信息为 unknown source的解决办法: jdk 替换jre, 编译时加上debug=true...
java - 对于 提示信息为 unknown source的解决办法: jdk 替换jre, 编译时加上debug=true 2017-08-09 10:43 访问量: 4466 分类: 技术 昨天 ...
- [GO语言基础] 二.编译运行、语法规范、注释转义及API标准库知识普及
作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了什么是GO语言 ...
- linux里面查找替换命令,LINUX 查找替换命令 总结
find /var/ -name "*.php" > /home/tmp 在/var/目录下查找 所有以.php后缀结尾的文件 结果很多,就 > 输出结果到/home ...
- 自定义异常类: 运行期间跟编译期间的区别
1.自定义异常一: 继承RuntmeExcepyion,即运行期间异常; 由于我们自定义的是运行期间的异常,我们抛出异常,程序始终不作处理,程序编译的时候不会报错,但是运行的时候会报错 ...
- 【Android 安全】DEX 加密 ( Application 替换 | 创建用户自定义 Application | 替换 ContextImpl 对象的 mOuterContext 成员 )
文章目录 一.创建用户自定义 Application 二.替换 ContextImpl 对象的 mOuterContext 成员 dex 解密时 , 需要将 代理 Application 替换为 真实 ...
- vi交互式批量替换 vi批量替换 vi查找和替换
vi中如何实现批量替换? 举个例子啊: 将文件tihuan(假设此文本中字符a)中的所有字符a换成字符w,其命令为: 1.vi tihuan 2.按esc键 3.按shift+: 4.在:后输入 ...
- java字符串反转及替换_字符串的替换(str_replace)
php字符串与字符替换函数 在php教程替换字符效率最高也是最简单字符替换函数str_replace($arr1,$arr2,$str) 实例一 str_replace("iwind&quo ...
最新文章
- python开源商城_Leaf - 一个开发友好、功能完备的开源微信商城框架
- 基于RNN的NLP机器翻译深度学习课程 | 附实战代码
- 项目使用mysql接收emoji表情
- 基本的Socket通信
- Jmeter跨线程组传递参数
- 解决pytorch训练的过程中内存一直增加的问题
- 机器学习—模型超参数调优之网格搜索与随机搜索
- 五十位名嘴用文字悼念心中永远的榜样罗京
- unity 3D打不开已建项目或新建项目
- BUAA 数据结构总结——大作业(文本摘要生成)
- python3 分割list
- 「ことから」と「ことだから」
- jmeter压测学习28-监听器之用表格察看结果(View Results in Table)
- 尚硅谷web前端工程师1000集学习笔记11
- 7-9 7-10 sdut-C语言实验- 排序
- 【论文分享】图嵌入恶意域名检测算法:Malicious Domain Detection via Domain Relationship and Graph Models
- MSSQL和MYSQL数据库降权
- 对于单链表结构体中LinkList以及Lnode,*LinkList两种不同定义方式的个人理解
- 自动部署静态html,手把手教你用 GitHub 来部署静态网页
- 表格的编辑插件 editable.js
热门文章
- python医学数据挖掘_GitHub - SSSzhangSSS/Python-Data-mining-Tutorial: Python数据挖掘教程
- idea全局搜索搜不全的BUG
- java 抽象类构造函数_抽象类可以有构造函数吗?
- ubuntu mysql 防火墙_mysql、ubuntu系统防火墙常规操作
- 【HDU - 1080】Human Gene Functions(dp,可编辑距离类问题)
- 【牛客 - 272D】Where are you(Tarjan求桥)
- *【CodeForces - 791B】Bear and Friendship Condition (图论,判断完全图,dfs乱搞或带权并查集)
- github怎么切换到gitee_AOSP-RISCV 的开源仓库在 Gitee 上新建了镜像
- 级差公排php如何_什么是专业级差?专业级差怎么安排专业?
- 实验一熟悉matlab环境,数字信号处理报告实验一:熟悉MATLAB环境.doc