日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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主题资源替换(二) :编译期间,替换主题资源的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。