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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决 idea 中 jsp 修改后页面不生效

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.问题描述&#xff1a;idea 编辑 jsp , 修改好后在 浏览器访问却发现页面完全无变化 。 2.解决&#xff0c;要在 idea 中作如下设置&a…

广州交警发布科目三路考秘笈

近段时间&#xff0c;如何通过新实行的科目三电子路考成为考车一族热议的话题。各种“通关秘笈”在坊间流传。为了让广大考生了解电子路考究竟怎么考&#xff0c;7日晚&#xff0c;广州交警在微博广州交警 上发布了官方“秘笈”&#xff1a;一段长9分钟的科目三电子路考演示视频…

test0

s 转载于:https://www.cnblogs.com/oneTOinf/p/11527940.html

解决 :IDEA 修改代码后 Local Changes 中没有提示待提交文件,代码自动提交了

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 通常修改代码后 会在 Local Changes 中提示修改过的文件&#xff0c;如下&#xff1a; 2. 我的情况是 &#xff0c;在这个界面中什么…

3.1 go context代码示例

context.WithCancel返回两个有关联的对象&#xff0c;ctx与cancel&#xff0c;调用cancel发送一个空struct给ctx&#xff0c;ctx一旦接收到该对象后&#xff0c;就终止goroutine的执行;ctx是线程安全的&#xff0c;可以同时传递给多个goroutine&#xff0c;触发cancel时&#x…

JS 中去除空格和换行的正则表达式写法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 //去除空格 String.prototype.Trim function() { return this.replace(/\s/g, ""); } //去除换行 function ClearBr(key) {…

科目三电子路考哪些情况会被评判不合格

2014年驾考科目三电子路考时需要注意&#xff0c;出现下列情形会被评判为不合格&#xff1a; 1、不按规定使用安全带或者戴安全头盔的; 2、遮挡、关闭车内音视频监控设备的; 3、不按考试员指令驾驶的; 4、不能正确使用灯光、雨刮器等车辆常用操纵件的; 5、起步时车辆后溜距离大…

FreeSql (一)入门

FreeSql 是一个功能强大的对象关系映射程序(O/RM)&#xff0c;支持 .NETCore 2.1 或 .NETFramework 4.5&#xff08;QQ群&#xff1a;4336577&#xff09; FreeSql采用MIT开源协议托管于 github。 特性 [x] 支持 CodeFirst 迁移&#xff1b;[x] 支持 DbFirst 从数据库导入实体类…

解决:Caused by: java.lang.UnsupportedOperationException: null

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.报错&#xff1a; 严重: Servlet.service() for servlet [lbd-institution] in context with path [/ins] threw exception [Reques…

2014科目三大路考各项目操作要求

机动车驾驶员考试科目三大路考到底都考哪些项目呢&#xff1f;每个项目的具体考试要求分别是什么&#xff1f;下面就跟着小编一起来了解一下吧&#xff01; 新驾考科目三考试内容及变化&#xff1a; A、上车准备;B、起步;C、直线行驶; D、加减挡位操作;E、变更车道; F、靠边停…

FreeSql (二)自动迁移实体

FreeSql 支持 CodeFirst 迁移结构至数据库&#xff0c;这应该是(O/RM)必须标配的一个功能。 与其他(O/RM)不同FreeSql支持更多的数据库特性&#xff0c;而不只是支持基础的数据类型&#xff0c;这既是优点也是缺点&#xff0c;优点是充分利用数据库特性辅助开发&#xff0c;缺点…

IntelliJ IDEA 设置代码检查级别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 设置代码检查等级   IntelliJ IDEA中最右下角的小按钮可以设置当前编辑文档的代码检查等级&#xff0c;如图   Inspections 为最高等…

科目三路考流程及注意事项

机动车驾驶员考试科目三路考考试流程可分为7个步骤&#xff0c;分别有什么注意事项&#xff0c;下面就让小编给大家介绍下吧&#xff01; 1.上车前&#xff0c;无论你在车辆的什么位置&#xff0c;请务必从车的右侧绕过车头走到驾驶室门前&#xff0c;先观察车前道路上是否有障…

FreeSql (三)实体特性

主键(Primary Key) class Topic {[Column(IsPrimary true)]public int Id { get; set; } } 约定&#xff1a; 当没有指明主键时&#xff0c;命名为 id 的字段将成为主键&#xff1b;&#xff08;不区分大小写&#xff09;当主键是 Guid 类型时&#xff0c;插入时会自动创建&am…

spring 中构造Constructor、@Autowired、@PostConstruct、静态方法的执行顺序 (@PostConstruct 说明)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 关于注解 PostConstruct public interface PostConstructPostConstruct 注释用于在依赖关系注入完成之后需要执行的方法上&#xff…

科目三靠边停车驾驶流程

科目三靠边停车项目考试要求是什么&#xff1f;靠边停车驾驶难不难&#xff1f;有什么驾驶技巧吗&#xff1f; 靠边停车考试项目中规定&#xff0c;车前保险杠离目标前后均不超过1250px&#xff0c;车距目标的横向距离保持在50-2500px之间&#xff0c;同时停车后车要与路边平行…

FreeSql (四)实体特性 Fluent Api

FreeSql 提供使用 Fluent Api&#xff0c; 在外部配置实体的数据库特性&#xff0c;Fluent Api 的方法命名与特性名保持一致&#xff0c;如下&#xff1a; fsql.CodeFirst.ConfigEntity<TestFluenttb1>(a > {a.Name("xxdkdkdk1").SelectFilter("a.Id22…

mybatis3 中 @Provider 的使用方式

若用MyBatis注解方式写sql&#xff0c;又想要XML写法的判断入参拼接条件&#xff0c;可以通过SelectProvider方式实现。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 新建Provider …

科目三电子路考易错细节总结

小编咨询了多家驾校的教练员&#xff0c;总结了科目三电子路考中&#xff0c;考生犯错率最高的几个细节&#xff0c;下面就一起来看看是哪些吧&#xff0c;希望对还没参加科目三考试的朋友有所帮助。 ●起步前不使用安全带 在等待了约2小时后&#xff0c;考生史某终于坐上了考…

java 查询功能实现的八种方式

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 只是记录一下 1. HQL 2. Mybatis : mapper.xml 中写 sql 。 3. Mybatis : 注解 Select Select("select * from xxx_order wher…