【WPF】實現動態切換語言(國際化)以及動態換膚功能

来源:https://www.cnblogs.com/weskynet/archive/2022/09/17/16703187.html
-Advertisement-
Play Games

前言:以下內容,手把手從搭建到最終實現,完成多語言切換以及換裝功能。 本地系統環境:win 10 編譯器環境:VS2022 社區版 .NET 環境: .NET 6 1、新建一個WPF項目 2、新建完畢,添加兩個按鈕備用。 3、添加WPF用戶控制項庫類庫項目 4、創建控制項庫類庫項目 Wesky.Skin ...


前言:以下內容,手把手從搭建到最終實現,完成多語言切換以及換裝功能。

本地系統環境:win 10 

編譯器環境:VS2022 社區版

.NET 環境: .NET 6

 

1、新建一個WPF項目

 

2、新建完畢,添加兩個按鈕備用。

 

3、添加WPF用戶控制項庫類庫項目

 

4、創建控制項庫類庫項目 Wesky.Skin.Source,用來存放項目資源有關內容

 

5、新增一個資源字典文件

 

6、配置兩個按鈕的中文資源內容

 

7、再創建一個英文文本資源字典

 

8、創建兩個按鈕的英語文本資源

 

9、App.xaml文件內,引入資源信息(此處生效是全局的,如果要局部,就引入到指定的路徑內也是OK的)

 

10、通過靜態引用。靜態引用,可能會無法更換,可以繼續看後文描述,寫成動態引用,可以支持方便切換資源。

 

11、引用以後,啟動程式,看下效果。

 

12、按鈕點擊事件

 

13、資源文件只能在App內實現,所以為了方便,就寫到App.cs裡面,實現一個切換中英文的功能

 

14、由於App.cs不適合直接實例化,也不適合寫靜態(資源非靜態),所以寫一個中間類,來實現委托進行消息傳遞。

 

15、中英文切換事件的消息發佈。

 

16、新建一個實體類,把上面的類的實例存為靜態的,方便調取(如果使用依賴註入,可以理解為是單例的)

 

17、App構造函數內,實現實例化,以及事件的訂閱聲明。

 

18、事件的實現裡面,用來實現切換語言的功能

 

19、按鈕單擊事件,獲取實體類的實例,進行發佈消息。

 

20、由於以上使用了靜態引入,所以從始至終只會用最開始的資源。此處改成動態的 Dynamic

 

21、程式啟動走一波

 

22、按鈕1點擊,切換成英文

 

 

23、按鈕2點擊,切換回中文。

 

24、開始換膚,原理異曲同工。新增預設皮膚資源。

 

25、網路上隨便找了兩個圖片,僅供測試演示使用。

 

26、預設皮膚,設置白色背景圖片,以及按鈕的一個預設樣式

 

27、App.xaml內對資源字典進行引入

 

28、VS上面可以看到實時更新以後的樣式效果

 

29、修改Button為需要指定資源進行綁定,這樣可以配置多組不同的按鈕,或者指定使用哪種風格等。例如,還可以寫很多組不同樣式的button,設置key不一樣就可以。然後按照個人喜歡進行引用。此處就不做太多啰嗦操作了,說正事。

 

30、資源引用時候,提供key進行關聯(跟上面語言切換的原理一樣)

 

31、運行一下看看效果

 

32、再創建一個資源字典,用來做另一個皮膚使用

 

33、資源樣式代碼拷貝過來,進行一些修修改改(背景圖片、背景顏色,前景色等等style風格)

 

34、按照更換語言的方式,新主張一個更改皮膚的委托/事件。

 

 

35、App.cs內進行訂閱事件消息,以及實現皮膚資源更換。

 

36、按鈕功能內,新增發佈更改皮膚的事件消息。

 

37、程式啟動,走一波。

 

38、按鈕2走一波,背景更換為黑色背景。按鈕原先是金色,也切換成了白色。

 

39、按鈕1走一波,皮膚背景換回白色,按鈕背景換回金色。由於也設置了語言切換,所以語言也跟著更新了。

 

40、以上就是該文章的全部內容。如果需要源碼的,可以掃描關註我的微信公眾號(或者直接搜索 Dotnet Dancer),在公眾號聊天界面輸入 【skin】 即可獲取。

 

同時也歡迎各位大佬加入我的QQ群,點擊該博客原文鏈接【https://www.cnblogs.com/weskynet/p/16703187.html】後,拉到最下方,即可直接加入QQ群。

也可以掃以下二維碼加我微信私人好友,進入微信技術交流群(不發廣告,只做.NET內推和技術交流)

 

完結。謝謝大佬們圍觀。

 

歡迎加入QQ群: 群號:1079830632 WeskyNet交流群
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前面我們已經學習了動態SQL的if、where、set、choose(when,otherwise),今天我們來學習剩下的foreach。 什麼時候用到foreach呢?比如說我們要查詢一個表中id為1,3,4的數據,我們應該寫SQL語句為: select * from TABLE where (i ...
  • 一、什麼是SQL片段 就是將我們Mapper.xml文件中部分SQL語句拿出來單獨用一個sql標簽進行標記,這個sql標簽就是一個SQL片段。 二、為什麼要用到SQL片段 這個sql標簽可以被引用,這樣需要用到這個sql標簽中的SQL語句的地方直接引用就可以,如此一來就提高了SQL代碼的復用性,而不 ...
  • #MyBatis Plus 國產的開源框架,基於 MyBatis 核心功能就是簡化 MyBatis 的開發,提高效率。 ##MyBatis Plus 快速上手 官網快速上手案例 Spring Boot(2.3.0) + MyBatis Plus(國產的開源框架,並沒有接入到 Spring 官方孵化器 ...
  • 今天我就來告訴你“一名合格的爬蟲師需要學習哪些技術”?哪些技術我們該著重掌握? 一、Python語言 重要程度 :★★★★★(重中之重) 任何一門技術都是需要語言來支持的。在眾多的電腦編程語言中,Python無疑是最適合做爬蟲的,最適合併不代表是唯一的,其它的語言例如Java、C等等都是可以來做爬 ...
  • 在上一篇if中我們已經把if和where標簽進行了學習,現在我們學習一些剩下的標簽。 一、set標簽 首先看官方文檔給出的說明: 用於動態更新語句的類似解決方案叫做 set。set 元素可以用於動態包含需要更新的列,忽略其它不更新的列。 set 元素會動態地在行首插入 SET 關鍵字,並會刪掉額外的 ...
  • 2022-09-17 裝飾器的使用實例——獲得計時函數所用時間: 1 import time 2 # 定義裝飾器函數 3 def decorator(fun): 4 def inner(): 5 # 獲得開始時間 6 start = time.time() 7 # 執行計時函數 8 fun() 9 ...
  • /** * 版權所有 2022 塗聚文有限公司 * 許可信息查看: * 描述: * 裝飾模式 Decorator Patterns * 歷史版本: JDK 14.02 * 2022-09-12 創建者 geovindu * 2022-09-12 添加 Lambda * 2022-09-12 修改:d ...
  • 先新建一個類,因為我們肯定要在類裡面寫,在main方法里調用(為求好理解這裡我用的預設名,請勿糾結) 首先我們要想到函數中的字元串最好是要用戶自行輸入的,那麼我們可以通過main方法里的Console.WriteLine獲取到用戶輸入的三個字元串,依次賦值給參數,然後調用我們在類里寫好的方法體 可以 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...