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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#/.Net Core/WPF框架初建(国际化、主题色)

發布時間:2023/12/4 C# 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#/.Net Core/WPF框架初建(国际化、主题色) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

English?| 簡體中文

作為 TerminalMACS 的一個子進程模塊 - WPF管理端,目前搭建框架部分功能:本地化、國際化、主題色修改等。

導航目錄

  • 1.框架已添加功能說明

    • 1.1. 國際化、本地化

    • 1.2. Metro風格主窗體

    • 1.3. 動態更換主題色

  • 2.關于TerminalMACS及本WPF管理端

  • ? 2.1. TerminalMACS

    ? 2.2. WPF管理端

  • 3.關于項目開源

  • 4.參考資料

1. 框架已添加功能說明

1.1. 國際化、本地化

源碼放在Github上,希望分享給更多人,所以添加了國際化功能,默認支持中、英、日三國語言,按照已有套路擴展其他語言也方便,看下面的效果:

本項目(TerminalMACS的WPF管理端)使用的資源字典存儲翻譯文件,其他方式還有資源文件、微軟官方的國際化方案(未研究)等。下面是翻譯文件截圖:

三個資源文件使用需要注意:

  • 1.選擇一個默認文件(比如en.xaml,英文)作為默認語言文件,需要將生成操作屬性設置為 "頁", 設置截圖如下:

  • 2.其他語言文件設置生成操作屬性為內容,設置截圖如下:

  • 3.需要將默認語言資源文件添加到App.xaml中,其他語言不用:

<Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="I18nResources/en.xaml"/> ......
  • 4.在項目初始化時,即加載主窗體之前,需要設置當前語言(加載操作系統語言或者程序上次運行時的配置,即本地化功能),本項目采用Prism作為MVVM及模塊化框架,所以在CreateShell方法調用切換語言方法:

App.xaml.cs

protected override Window CreateShell() { LanguageHelper.SetLanguage(); return Container.Resolve<MainWindow>(); }
  • 5.國際化,即在運行期間,動態切換語言,在主窗體中添加語言切換配置菜單,在菜單的Tag屬性中配置語言文件名,如下:

MainWindow.xaml

<Metro:MetroMenuItem Header="{DynamicResource MainMenu_Language}" ><Metro:MetroMenuItem Header="中文" Tag="zh-CN" Click="ChangeLanguage_Click"/><Metro:MetroMenuItem Header="English" Tag="en" Click="ChangeLanguage_Click"/><Metro:MetroMenuItem Header="日本語" Tag="ja" Click="ChangeLanguage_Click"/> </Metro:MetroMenuItem>

后臺代碼切換語言:

private void ChangeLanguage_Click(object sender, RoutedEventArgs e){ string language = (sender as MetroMenuItem).Tag.ToString(); LanguageHelper.SetLanguage(language);}

具體的語言設置方法,封裝如下:

LanguageHelper.cs

private const string KEY_OF_LANGUAGE = "language";public static void SetLanguage(string language = ""){ if (string.IsNullOrWhiteSpace(language)) { language = ConfigHelper.ReadKey(KEY_OF_LANGUAGE); if (string.IsNullOrWhiteSpace(language)) { language = System.Globalization.CultureInfo.CurrentCulture.ToString(); } }string languagePath = $@"I18nResources\{language}.xaml"; try { var lanRd = Application.LoadComponent(new Uri(languagePath, UriKind.Relative)) as ResourceDictionary; var old = Application.Current.Resources.MergedDictionaries.FirstOrDefault(o => o.Contains("AppTitle")); if (old != null) { Application.Current.Resources.MergedDictionaries.Remove(old); } Application.Current.Resources.MergedDictionaries.Add(lanRd); ConfigHelper.SetKey(KEY_OF_LANGUAGE, language);var culture = new System.Globalization.CultureInfo(language); System.Globalization.CultureInfo.CurrentCulture = culture; System.Globalization.CultureInfo.CurrentUICulture = culture; } catch { }}

管理端當前語言配置在App.config文件appSettings節點下,第一次發布時,值為空,程序為讀取操作系統語言進行本地化設置,然后更新language節點,主窗體動態切換時,也會更新此節點:

App.config

<add key="language" value=""/>

1.2. Metro風格主窗體

使用開源控件庫 AduSkin 的 MetroWindow 作為主窗體基類,方便的將菜單添加到標題欄,效果如下:

代碼中使用,添加命名空間:

xmlns:Metro="clr-namespace:AduSkin.Controls.Metro;assembly=AduSkin"

修改主窗體基類 Window 為 Metro:MetroWindow,標題欄菜單添加部分代碼如下:

<Metro:MetroWindow.Menu><Metro:MetroTitleMenu Height="40"><Metro:MetroTitleMenuItem Header="{DynamicResource MainMenu_Contact}" Icon="/Images/Contact.png"><Metro:MetroMenuItem Header="QQ" Command="AduOpenLink:ControlCommands.OpenLink" CommandParameter="http://wpa.qq.com/msgrd?v=3&uin=632871194&site=qq&menu=yes"/><Metro:MetroMenuItem Header="{DynamicResource MainMenu_QQGroup}" Command="AduOpenLink:ControlCommands.OpenLink"CommandParameter="https://jq.qq.com/?_wv=1027&k=50b36fD"/><Metro:MetroMenuItem Header="{DynamicResource MainMenu_Email}" Command="AduOpenLink:ControlCommands.OpenLink"CommandParameter="mailto:632871194@qq.com" /></Metro:MetroTitleMenuItem> ......

1.3. 動態更換主題色

程序運行過程中,動態修改主題色,效果如圖:

配色菜單代碼如下:

<Metro:MetroColorPicker x:Name="Theme" Width="50" Height="20" Grid.Column="1"Background="{StaticResource DefaultBrush}"DefaultColor="{StaticResource DefaultBrush}" />

注意:需要在后臺注冊顏色改變事件:

Theme.ColorChange += delegate{ // Do not bind colors through XAML, unable to get notifications BorderBrush = Theme.CurrentColor.OpaqueSolidColorBrush;};

2. 關于TerminalMACS及本WPF管理端

2.1. TermainMACS

多終端資源管理與檢測系統,包含多個子進程模塊,目前開發了Xamarin.Forms客戶端、WPF管理端、.NET Core WEB API服務端,下一步繼續完善WPF管理端。

2.2. WPF管理端

作為TerminalMACS系統的一個子進程模塊,目前只搭建了簡單的框架(未完),添加了國際化、本地化、主題換色等功能,Prism模塊化功能待加。

3. 關于項目開源

  • 1.開源項目地址:https://github.com/dotnet9/TerminalMACS

  • 2.官方網站:https://terminalmacs.com

  • 3.合作網站:https://dotnet9.com

4. 參考資料

  • 全球化和本地化:https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/advanced/globalization-and-localization

  • WPF國際化方式1之資源文件:https://www.cnblogs.com/qwqwQAQ/p/11595454.html

  • [WPF]本地化入門:https://www.cnblogs.com/dino623/p/LocalizationWPF.html

  • AduSkin:https://github.com/aduskin/AduSkin

  • HandyControl:https://github.com/HandyOrg/HandyControl

總結

以上是生活随笔為你收集整理的C#/.Net Core/WPF框架初建(国际化、主题色)的全部內容,希望文章能夠幫你解決所遇到的問題。

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