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框架初建(国际化、主题色)相关推荐

  1. c# contains方法_C#/.Net Core/WPF框架初建(国际化、主题色)

    C#/.Net Core/WPF框架初建(国际化.主题色) English | 简体中文 作为 TerminalMACS 的一个子进程模块 - WPF管理端,目前搭建框架部分功能:本地化.国际化.主题 ...

  2. 怎样实现WPF Prism Module的国际化和本地化?

    English | 简体中文 上一篇有简单介绍主工程的国际化,使用的资源字典(XAML)实现的.这几天我添加了几个Prism模块(Module),发现子模块使用资源字典的方式实现国际化和本地化不好做, ...

  3. Scrum团队初建的十一件事——Scrum中文网

    本文转自:Scrum中文网 原文链接:http://www.scrumcn.com/agile/scrum/22585.html 越来越多的公司(IT/非IT)正在做或者计划做Scrum转型.很多的团 ...

  4. WPF框架教程 | 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

    之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Caliburn.Micro(https://blog.csdn.net/lzuacm/ar ...

  5. .Net Core应用框架Util介绍(三)

    上篇.Net Core应用框架Util介绍(二)介绍了Util的开发环境,并让你把Demo运行起来.本文将介绍该Demo的前端Angular运行机制以及目录结构. 目录结构 在VS上打开Util De ...

  6. .Net Core应用框架Util介绍(二)

    Util的开源地址 https://github.com/dotnetcore/util Util的开源协议 Util以MIT协议开源,这是目前最宽松的开源协议,你不仅可以用于商业项目,还能把Util ...

  7. .NET Core UI框架Avalonia

    .NET Core UI框架Avalonia,Avalonia是一个基于WPF XAML的跨平台UI框架,并支持多种操作系统:Windows(.NET Framework,.NET Core),Lin ...

  8. 微软 WPF 框架源码现已托管至 GitHub

    WPF(Windows Presentation Foundation) 是微软推出的用于构建桌面客户端应用程序的 UI 框架,具有应用程序模型.控件.图形.布局.数据绑定和安全性等功能,属于 .NE ...

  9. 解决VS2019中.net core WPF 暂时无法使用 Designer 的临时方法

    目录 解决 VS2019 中.net core WPF 暂时无法使用 Designer 的临时方法 安装 vs 2019 professional/enterprise版本 在vs的设置里,勾选.NE ...

最新文章

  1. JAVA从数据库中拿到数据
  2. javascript(1)
  3. 纳税服务系统十一【抽取BaseService、条件查询】
  4. linux与unix时间戳互转
  5. c#中的protected和internal
  6. python绝技 — 侦听802.11 Probe请求
  7. JSTL标准标签库的国际化标签
  8. 计划策略70 之 MIXED MRP(mixed MRP)
  9. 渣男劈腿,两个女生逼他做出选择,结果......
  10. Linux 指令的分类 (man page 可查看)
  11. MySQL的回表查询与索引覆盖查询
  12. 程序员面试注意几点就够了
  13. windows系统镜像修复计算机,Win7操作系统下系统还原和映像修复方法
  14. igraph与netwrokx的转换
  15. 闲聊HTML5的新特性
  16. 《SSH框架》---SSH框架与框架
  17. 【新手上路】Java必备小游戏——Flappy Bird(飞翔的小鸟)
  18. ORACLE的统计分析
  19. adb自动化控制手机工具类
  20. C语言/C++常见习题问答集锦[八十三]之数据结构顺序表(operand types are error: no match for “operator==“)

热门文章

  1. 添加ASP.NET网站资源文件夹
  2. 设置tableView的分割线从最左端开始
  3. 个人控件/对象命名规范(慢慢更新)
  4. jQuery banner切换插件
  5. android wifi
  6. 微软输入法2010下载使用-IME2010下载使用
  7. Facebook 如何管理150亿张照片
  8. 最大连续子数组和与JUnit测试
  9. [原创]同一个Tomcat,配置多个context、多个Host
  10. ThoughtWorks技术雷达专区