【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
  • 一:背景 1.講故事 在分析的眾多dump中,經常會遇到各種奇葩的問題,僅通過dump這種快照形式還是有很多問題搞不定,而通過 perfview 這種粒度又太粗,很難找到問題之所在,真的很頭疼,比如本篇的 短命線程 問題,參考圖如下: 我們在 t2 時刻抓取的dump對查看 短命線程 毫無幫助,我根 ...
  • 在日常後端Api開發中,我們跟前端的溝通中,通常需要協商好入參的數據類型,和參數是通過什麼方式存在於請求中的,是表單(form)、請求體(body)、地址欄參數(query)、還是說通過請求頭(header)。 當協商好後,我們的介面又需要怎麼去接收這些數據呢?很多小伙伴可能上手就是直接寫一個實體, ...
  • 許多情況下我們需要用到攝像頭獲取圖像,進而處理圖像,這篇博文介紹利用pyqt5、OpenCV實現用電腦上連接的攝像頭拍照並保存照片。為了使用和後續開發方便,這裡利用pyqt5設計了個相機界面,後面將介紹如何實現,要點包括界面設計、邏輯實現及完整代碼。 ...
  • 思路分析 註冊頁面需要對用戶提交的數據進行校驗,並且需要對用戶輸入錯誤的地方進行提示! 所有我們需要使用forms組件搭建註冊頁面! 平時我們書寫form是組件的時候是在views.py裡面書寫的, 但是為了接耦合,我們需要將forms組件都單獨寫在一個地方,需要用的時候導入就行! 例如,在項目文件 ...
  • 思路分析 登錄頁面,我們還是採用ajax的方式提交用戶數據 唯一需要學習的是如何製作圖片驗證碼! 具體的登錄頁面效果圖如下: 如何製作圖片驗證碼 推導步驟1:在img標簽的src屬性里放上驗證碼的請求路徑 補充1.img的src屬性: 1.圖片路徑 2.url 3.圖片的二進位數據 補充2:字體樣式 ...
  • 哈嘍,兄弟們! 最近有許多小伙伴都在吐槽打工好難。 每天都是執行許多重覆的任務 例如閱讀新聞、發郵件、查看天氣、打開書簽、清理文件夾等等, 使用自動化腳本,就無需手動一次又一次地完成這些任務, 非常方便啊有木有?! 而在某種程度上,Python 就是自動化的代名詞。 今天就來和大家一起學習一下, 用 ...
  • 作者:IT王小二 博客:https://itwxe.com 前面小二介紹過使用Typora+PicGo+LskyPro打造舒適寫作環境,那時候需要使用水印功能,但是小二在升級LskyPro2.x版本發現有很多不如人意的東西,遂棄用LskyPro使用MinIO結合代碼實現自己需要的圖床功能,也適合以後 ...
  • OpenAI Gym是一款用於研發和比較強化學習演算法的工具包,本文主要介紹Gym模擬環境的功能和工具包的使用方法,並詳細介紹其中的經典控制問題中的倒立擺(CartPole-v0/1)問題。最後針對倒立擺問題如何建立控制模型並採用爬山演算法優化進行了介紹,並給出了相應的完整python代碼示例和解釋。要... ...
  • python爬蟲瀏覽器偽裝 #導入urllib.request模塊 import urllib.request #設置請求頭 headers=("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, l ...
  • 前端代碼搭建 主要利用的是bootstrap3中js插件里的模態框版塊 <li><a href="" data-toggle="modal" data-target=".bs-example-modal-lg">修改密碼</a></li> <div class="modal fade bs-exam ...