【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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...