【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


目录
相关文章
|
3月前
|
C# 机器学习/深度学习 搜索推荐
WPF与机器学习的完美邂逅:手把手教你打造一个具有智能推荐功能的现代桌面应用——从理论到实践的全方位指南,让你的应用瞬间变得高大上且智能无比
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)应用中集成机器学习功能,以开发具备智能化特性的桌面应用。通过使用Microsoft的ML.NET框架,本文演示了从安装NuGet包、准备数据集、训练推荐系统模型到最终将模型集成到WPF应用中的全过程。具体示例代码展示了如何基于用户行为数据训练模型,并实现实时推荐功能。这为WPF开发者提供了宝贵的实践指导。
43 0
|
3月前
|
开发者 C# UED
WPF与多媒体:解锁音频视频播放新姿势——从界面设计到代码实践,全方位教你如何在WPF应用中集成流畅的多媒体功能
【8月更文挑战第31天】本文以随笔形式介绍了如何在WPF应用中集成音频和视频播放功能。通过使用MediaElement控件,开发者能轻松创建多媒体应用程序。文章详细展示了从创建WPF项目到设计UI及实现媒体控制逻辑的过程,并提供了完整的示例代码。此外,还介绍了如何添加进度条等额外功能以增强用户体验。希望本文能为WPF开发者提供实用的技术指导与灵感。
141 0
|
3月前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
57 0
|
3月前
|
API C# Shell
WPF与Windows Shell完美融合:深入解析文件系统操作技巧——从基本文件管理到高级Shell功能调用,全面掌握WPF中的文件处理艺术
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的关键组件,用于构建 Windows 桌面应用程序。WPF 提供了丰富的功能来创建美观且功能强大的用户界面。本文通过问题解答的形式,探讨了如何在 WPF 应用中集成 Windows Shell 功能,并通过具体示例代码展示了文件系统的操作方法,包括列出目录下的所有文件、创建和删除文件、移动和复制文件以及打开文件夹或文件等。
76 0
|
3月前
|
C# Windows 监控
WPF应用跨界成长秘籍:深度揭秘如何与Windows服务完美交互,扩展功能无界限!
【8月更文挑战第31天】WPF(Windows Presentation Foundation)是 .NET 框架下的图形界面技术,具有丰富的界面设计和灵活的客户端功能。在某些场景下,WPF 应用需与 Windows 服务交互以实现后台任务处理、系统监控等功能。本文探讨了两者交互的方法,并通过示例代码展示了如何扩展 WPF 应用的功能。首先介绍了 Windows 服务的基础知识,然后阐述了创建 Windows 服务、设计通信接口及 WPF 客户端调用服务的具体步骤。通过合理的交互设计,WPF 应用可获得更强的后台处理能力和系统级操作权限,提升应用的整体性能。
104 0
|
3月前
|
开发者 C# 自然语言处理
WPF开发者必读:掌握多语言应用程序开发秘籍,带你玩转WPF国际化支持!
【8月更文挑战第31天】随着全球化的加速,开发多语言应用程序成为趋势。WPF作为一种强大的图形界面技术,提供了优秀的国际化支持,包括资源文件存储、本地化处理及用户界面元素本地化。本文将介绍WPF国际化的实现方法,通过示例代码展示如何创建和绑定资源文件,并设置应用程序语言环境,帮助开发者轻松实现多语言应用开发,满足不同地区用户的需求。
69 0
|
3月前
|
前端开发 C# 容器
WPF/C#:实现导航功能
WPF/C#:实现导航功能
66 0
|
开发框架 前端开发 JavaScript
WPF+ASP.NET SignalR实现简易在线聊天功能
WPF+ASP.NET SignalR实现简易在线聊天功能
208 0
|
前端开发 C# 图形学
【WPF】WPF开发用户控件、用户控件属性依赖DependencyProperty实现双向绑定、以及自定义实现Command双向绑定功能演示
Wpf开发过程中,最经常使用的功能之一,就是用户控件(UserControl)了。用户控件可以用于开发用户自己的控件进行使用,甚至可以用于打造一套属于自己的UI框架。依赖属性(DependencyProperty)是为用户控件提供可支持双向绑定的必备技巧之一,同样用处也非常广泛。
939 0
【WPF】WPF开发用户控件、用户控件属性依赖DependencyProperty实现双向绑定、以及自定义实现Command双向绑定功能演示
|
XML Java 程序员
WPF使用AvalonEdit实现代码高亮显示、搜索、替换功能
很多工程软件拥有自己定义的脚本语言,作为程序员用惯了具有高亮显示和智能提示功能的编辑器,所以针对特定的脚本自己开发一个编辑器。主要采用WPF、C#语言以及AvalonEdit控件。
WPF使用AvalonEdit实现代码高亮显示、搜索、替换功能