北京 个人网站 备案,贵州建设网老网站,四川省建设工程招标网官网,北京机建网站English | 简体中文作为 TerminalMACS 的一个子进程模块 - WPF管理端#xff0c;目前搭建框架部分功能#xff1a;本地化、国际化、主题色修改等。导航目录1.框架已添加功能说明1.1. 国际化、本地化1.2. Metro风格主窗体1.3. 动态更换主题色2.关于TerminalMACS及本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.ResourcesResourceDictionaryResourceDictionary.MergedDictionariesResourceDictionary SourceI18nResources/en.xaml/
......
4.在项目初始化时即加载主窗体之前需要设置当前语言加载操作系统语言或者程序上次运行时的配置即本地化功能本项目采用Prism作为MVVM及模块化框架所以在CreateShell方法调用切换语言方法App.xaml.csprotected override Window CreateShell() { LanguageHelper.SetLanguage(); return Container.ResolveMainWindow(); }
5.国际化即在运行期间动态切换语言在主窗体中添加语言切换配置菜单在菜单的Tag属性中配置语言文件名如下MainWindow.xamlMetro:MetroMenuItem Header{DynamicResource MainMenu_Language} Metro:MetroMenuItem Header中文 Tagzh-CN ClickChangeLanguage_Click/Metro:MetroMenuItem HeaderEnglish Tagen ClickChangeLanguage_Click/Metro:MetroMenuItem Header日本語 Tagja ClickChangeLanguage_Click/
/Metro:MetroMenuItem
后台代码切换语言private void ChangeLanguage_Click(object sender, RoutedEventArgs e){ string language (sender as MetroMenuItem).Tag.ToString(); LanguageHelper.SetLanguage(language);}
具体的语言设置方法封装如下LanguageHelper.csprivate 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.configadd keylanguage value/
1.2. Metro风格主窗体使用开源控件库 AduSkin 的 MetroWindow 作为主窗体基类方便的将菜单添加到标题栏效果如下代码中使用添加命名空间xmlns:Metroclr-namespace:AduSkin.Controls.Metro;assemblyAduSkin
修改主窗体基类 Window 为 Metro:MetroWindow标题栏菜单添加部分代码如下Metro:MetroWindow.MenuMetro:MetroTitleMenu Height40Metro:MetroTitleMenuItem Header{DynamicResource MainMenu_Contact} Icon/Images/Contact.pngMetro:MetroMenuItem HeaderQQ CommandAduOpenLink:ControlCommands.OpenLink CommandParameterhttp://wpa.qq.com/msgrd?v3uin632871194siteqqmenuyes/Metro:MetroMenuItem Header{DynamicResource MainMenu_QQGroup} CommandAduOpenLink:ControlCommands.OpenLinkCommandParameterhttps://jq.qq.com/?_wv1027k50b36fD/Metro:MetroMenuItem Header{DynamicResource MainMenu_Email} CommandAduOpenLink:ControlCommands.OpenLinkCommandParametermailto:632871194qq.com //Metro:MetroTitleMenuItem
......
1.3. 动态更换主题色程序运行过程中动态修改主题色效果如图配色菜单代码如下Metro:MetroColorPicker x:NameTheme Width50 Height20 Grid.Column1Background{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/TerminalMACS2.官方网站https://terminalmacs.com3.合作网站https://dotnet9.com4. 参考资料全球化和本地化https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/advanced/globalization-and-localizationWPF国际化方式1之资源文件https://www.cnblogs.com/qwqwQAQ/p/11595454.html[WPF]本地化入门https://www.cnblogs.com/dino623/p/LocalizationWPF.htmlAduSkinhttps://github.com/aduskin/AduSkinHandyControlhttps://github.com/HandyOrg/HandyControl