【WPF】实现动态切换语言(国际化)以及动态换肤功能

简介: 以下内容,手把手从搭建到最终实现,完成多语言切换以及换装功能。


前言:以下内容,手把手从搭建到最终实现,完成多语言切换以及换装功能。

本地系统环境:win 10

编译器环境:VS2022 社区版

.NET 环境: .NET 6

 

1、新建一个WPF项目


1995789-20220917165640725-1992577416.png

 

2、新建完毕,添加两个按钮备用。


1995789-20220917165656170-230152692.png


3、添加WPF用户控件库类库项目


1995789-20220917165706420-750389499.png

 

4、创建控件库类库项目 Wesky.Skin.Source,用来存放项目资源有关内容


1995789-20220917165714977-1892854122.png

 

5、新增一个资源字典文件

 1995789-20220917165723355-1270946370.png


6、配置两个按钮的中文资源内容


1995789-20220917165732902-757630957.png

 

7、再创建一个英文文本资源字典


1995789-20220917165741211-1677272068.png

 

8、创建两个按钮的英语文本资源


1995789-20220917165752687-1865449004.png


9、App.xaml文件内,引入资源信息(此处生效是全局的,如果要局部,就引入到指定的路径内也是OK的)


1995789-20220917165803813-1123219145.png


10、通过静态引用。静态引用,可能会无法更换,可以继续看后文描述,写成动态引用,可以支持方便切换资源。


1995789-20220917165814765-1046572724.png


11、引用以后,启动程序,看下效果。


1995789-20220917165827613-1417699182.png


12、按钮点击事件


1995789-20220917165837545-1337841044.png 

13、资源文件只能在App内实现,所以为了方便,就写到App.cs里面,实现一个切换中英文的功能


1995789-20220917165848612-1229485943.png

 

14、由于App.cs不适合直接实例化,也不适合写静态(资源非静态),所以写一个中间类,来实现委托进行消息传递。

 1995789-20220917165858105-162816073.png


15、中英文切换事件的消息发布。


1995789-20220917165909682-1578593557.png


16、新建一个实体类,把上面的类的实例存为静态的,方便调取(如果使用依赖注入,可以理解为是单例的)


1995789-20220917165919126-1122200601.png

 

17、App构造函数内,实现实例化,以及事件的订阅声明。


1995789-20220917165928268-1505081234.png

 

18、事件的实现里面,用来实现切换语言的功能


1995789-20220917165938453-1504115562.png

 

19、按钮单击事件,获取实体类的实例,进行发布消息。


1995789-20220917165948848-1839568716.png

 

20、由于以上使用了静态引入,所以从始至终只会用最开始的资源。此处改成动态的 Dynamic


1995789-20220917170001094-522236608.png


21、程序启动走一波


1995789-20220917170011357-680578771.png

 

22、按钮1点击,切换成英文


1995789-20220917170110572-1018159956.png

 

23、按钮2点击,切换回中文。

 1995789-20220917170056063-490228256.png


24、开始换肤,原理异曲同工。新增默认皮肤资源。


1995789-20220917170127789-554289509.png


25、网络上随便找了两个图片,仅供测试演示使用。


1995789-20220917170139285-324584139.png

 

26、默认皮肤,设置白色背景图片,以及按钮的一个默认样式


1995789-20220917170152557-601356887.png

 

27、App.xaml内对资源字典进行引入


1995789-20220917170211588-1383406013.png

 

28、VS上面可以看到实时更新以后的样式效果


1995789-20220917170224712-1161406711.png

 

29、修改Button为需要指定资源进行绑定,这样可以配置多组不同的按钮,或者指定使用哪种风格等。例如,还可以写很多组不同样式的button,设置key不一样就可以。然后按照个人喜欢进行引用。此处就不做太多啰嗦操作了,说正事。


1995789-20220917170237811-1867828627.png

 

30、资源引用时候,提供key进行关联(跟上面语言切换的原理一样)

 1995789-20220917170251738-547120480.png


31、运行一下看看效果


1995789-20220917170306658-865478724.png

 

32、再创建一个资源字典,用来做另一个皮肤使用


1995789-20220917170317484-634111219.png

 

33、资源样式代码拷贝过来,进行一些修修改改(背景图片、背景颜色,前景色等等style风格)


1995789-20220917170327807-1489215393.png

 

34、按照更换语言的方式,新主张一个更改皮肤的委托/事件。


1995789-20220917173001582-1696720526.png

 

35、App.cs内进行订阅事件消息,以及实现皮肤资源更换。


1995789-20220917170355165-307318356.png


36、按钮功能内,新增发布更改皮肤的事件消息。


1995789-20220917170406238-929229857.png

 

37、程序启动,走一波。


1995789-20220917170415502-1386349648.png

 

38、按钮2走一波,背景更换为黑色背景。按钮原先是金色,也切换成了白色。


1995789-20220917170426796-1539011707.png

 

39、按钮1走一波,皮肤背景换回白色,按钮背景换回金色。由于也设置了语言切换,所以语言也跟着更新了。


1995789-20220917170445589-37163577.png


目录
相关文章
|
7月前
|
XML 编解码 开发工具
《移动互联网技术》第六章 资源管理: 掌握定制控件样式、界面主题、可绘制资源程序的编写方法
《移动互联网技术》第六章 资源管理: 掌握定制控件样式、界面主题、可绘制资源程序的编写方法
27 0
|
C#
WPF 界面实现多语言支持 中英文切换 动态加载资源字典
原文:WPF 界面实现多语言支持 中英文切换 动态加载资源字典 1、使用资源字典,首先新建两个字典文件en-us.xaml、zh-cn.xaml。定义中英文的字符串在这里面【注意:添加xmlns:s="clr-namespace:System;assembly=mscorlib】 zh-cn.
2932 0
|
自然语言处理
用控件仅一条指令实现界面换肤和多语言版本(YFSkins)
这一段时间做程序,一直在做界面方面的工作,刚开始是简单的贴图操作,后来感觉不通用,代码重用性不好,并且要做很多基本工作
598 0
|
Windows
UWP 扩展/自定义标题栏的方法,一些概念和一些注意事项
原文 UWP 扩展/自定义标题栏的方法,一些概念和一些注意事项 在 Windows 10 的前几个版本中将页面内容扩展到标题栏上还算简单,主要是没什么坑。直到一些新控件的引入和一些外观设计趋势变化之后,扩展标题栏开始出现一些坑了。
1240 0
|
Windows
UWP 轻量级样式定义(Lightweight Styling)
原文:UWP 轻量级样式定义(Lightweight Styling) 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:http://blog.csdn.net/wpwalter/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
886 0
|
C# Android开发
C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码
原文:C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码 前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.
953 0
|
C# 程序员 测试技术
WPF之动态换肤
原文:WPF之动态换肤 如何实现换肤呢,对于复杂的换肤操作,如,更换按钮样式、窗口样式等,我们需要写多个资源字典来表示不同的皮肤,通过动态加载不同的资源字典来实现换肤的效果;对于简单的换肤操作,如更改背景颜色、设置窗体透明度,这种换肤操作,我们就不能使用上面的方法了,这个时候,我们只要在一个全局对象中添加几个属性,如背景颜色、前景颜色、窗体透明度等,然后,再绑定这几个属性就能达到我们想要的效果。
952 0
|
C#
WPF通过代码动态的加载样式
原文:WPF通过代码动态的加载样式 tabitem.SetResourceReference(TabItem.StyleProperty, "mainTabItemStyle"); tabitem.Content = new Goods.GoodsMain();
1179 0
|
C#
WPF 动态更换样式文件
原文:WPF 动态更换样式文件   ApplySkinFromMenuItem("Style/BigImgStyle.xaml", "Style/FileListStyle.xaml");     //换肤        void ApplySkinFromMenuItem(string sou...
935 0
|
JavaScript 前端开发 C++
COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)
声明:本文代码基于CodeProject的文章《A Complete ActiveX Web Control Tutorial》修改而来,因此同样遵循Code Project Open License (CPOL)。
842 0