请选择 进入手机版 | 继续访问电脑版

马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

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

[复制链接]
查看2087 | 回复0 | 2019-9-17 11:32:08 | 显示全部楼层 |阅读模式

之前的ResourceDictionary主题资源更换(一)通过加载次序来覆盖之前的主题资源,先容了WPF框架对ResourceDictionary资源的归并规则。

此篇先容一种在编译期间,实现资源更换的方案

媒介

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

113334oa1qhv46v6o7vhvt.png

113334y1es4k717rn9sn55.png

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

113335wp3gtzbmptb7zvsb.png

113335q1a4ao8oyg4ia4af.png

添加项目属性文件

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

113336vgnswazngnntjl5z.png

并添加当前主题版本:

  1. 1 <Project>
  2. 2 <PropertyGroup>
  3. 3 <Theme>Theme-Red</Theme>
  4. 4 </PropertyGroup>
  5. 5 </Project>
复制代码

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

修改项目csproject

引入主题设置文件:

  1. <Import Project="..\Themes.props" Condition="Exists('..\Themes.props')" />
复制代码

添加资源更换:

在编译前,判定当前主题,假如为赤色主题,则更换;

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

更换后的主题色:

113336uj1vxg023xm59jpv.png

必要注意的坑

此方案,必要资源字典中的键值匹配对应,假如缺失了某个样式等资源,后续大概会故意想不到的异常哦~

怎样规避?

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

113336x7vhyc3mp0z80pl4.png

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







来源:https://www.cnblogs.com/kybs0/archive/2019/09/16/10731416.html
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则