【WPF】实现动态切换语言(国际化)以及动态换肤功能
前言:以下内容,手把手从搭建到最终实现,完成多语言切换以及换装功能。
本地系统环境:win 10
编译器环境:VS2022 社区版
.NET 环境: .NET 6
1、新建一个WPF项目

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

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

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

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

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

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

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

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

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

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

12、按钮点击事件

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

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

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

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

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

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

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

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

21、程序启动走一波

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

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

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

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

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

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

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

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

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

31、运行一下看看效果

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

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

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

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

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

37、程序启动,走一波。

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

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

40、以上就是该文章的全部内容。如果需要源码的,可以扫描关注我的微信公众号(或者直接搜索 Dotnet Dancer),在公众号聊天界面输入 【skin】 即可获取。

同时也欢迎各位大佬加入我的QQ群,点击该博客原文链接【https://www.cnblogs.com/weskynet/p/16703187.html】后,拉到最下方,即可直接加入QQ群。
也可以扫以下二维码加我微信私人好友,进入微信技术交流群(不发广告,只做.NET内推和技术交流)

完结。谢谢大佬们围观。
【WPF】实现动态切换语言(国际化)以及动态换肤功能的更多相关文章
- 使用 css/less 动态更换主题色(换肤功能)
前言 说起换肤功能,前端肯定不陌生,其实就是颜色值的更换,实现方式有很多,也各有优缺点 一.看需求是什么 一般来说换肤的需求分为两种: 1. 一种是几种可供选择的颜色/主题样式,进行选择切换,这种可供 ...
- Android应用内部实现多语言,一键切换语言,国际化适配
1.首先提供多语言对应的string值 如en对应英语, fr对应法语 两个文件中包含同样的key, 对应不同的语言的value 2.java代码相应用户切换语言动作 private static v ...
- WPF 实现换肤功能
将所有控件的基本样式汇集到一个资源字典中,构成界面的基本样式文件,然后进行不同颜色皮肤的定制. 即在新的皮肤资源字典文件中引入基本样式文件,然后使用资源继承,并且只设置控件的颜色属性等,形成一个皮肤文 ...
- Qt 国际化之二:多国语界面动态切换的实现
第一步在你的pro里面加入 TRANSLATIONS = myexec_zh.ts (根据对应的ts文件修改)第二步用lupdate 操作pro 将要翻译的提取到ts文件 命令是 lupdate my ...
- 【转】解析JDK 7的动态类型语言支持
http://www.infoq.com/cn/articles/jdk-dynamically-typed-language Java虚拟机的字节码指令集的数量自从Sun公司的第一款Java虚拟机问 ...
- 带事务管理的spring数据库动态切换
动态切换数据源理论知识 项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此:又例如:读写分离数据库配置的系统. 1.相信很多人都知道JDK代理,分静态代理和动态代理两种,同样的 ...
- hybird之web动态换肤实现
前言 最近在重构个hybird(原生的壳包着Web页面)的UI框架,进行到了做换肤功能的阶段,所以这里是我思考的解决的方法. 预想 目前实现换肤的功能无非就两种做法. 1.写几个皮肤文件,然后切换使用 ...
- duilib入门之贴图描述、类html文本描述、动态换肤、Dll插件、资源打包
转载自duilib入门文档 贴图描述: Duilib的表现力丰富很大程度上得益于贴图描述的简单强大.Duilib的贴图描述分为简单模式和复杂模式两种. 简单模式使用文件名做为贴图描述内容,在这种方式下 ...
- Android动态换肤(一、应用内置多套皮肤)
动态换肤在很多android应用中都有使用,用户根据自己的喜好设置皮肤主题,可以增强用户使用应用的舒适度. Android换肤可以分为很多种,它们从使用方式,用户体验以及项目框架设计上体现了明显的差异 ...
随机推荐
- idea启动java Maven项目,出现" java: 程序包xxxx不存在"
解决办法如下:将idea的构建和运行托管到maven下面
- windows系统下.NET CORE c# 通过bat脚本发布iis应用程序,半智能点击式ci/cd
这里以git为例子讲解: 第一个 pullCode.bat 文件是 拉取代码 git pull 第二个 publish.bat 脚本,编译代码,并发布指定文件夹 dotnet publish &quo ...
- (零)机器学习入门与经典算法之numpy的基本操作
1.根据索引来获取元素* 创建一个索引列表ind,用来装载索引,当numpy数据是一维数据时:一个索引对应的是一个元素具体的例子如下: import numpy as np # 数据是一维数据时:索引 ...
- 渗透测试(PenTest)基础指南
什么是渗透测试? 渗透测试(Penetration Test,简称为 PenTest),是指通过尝试利用漏洞攻击来评估IT基础设施的安全性.这些漏洞可能存在于操作系统.服务和应用程序的缺陷.不当配置或 ...
- APISpace 日出日落API接口 免费好用
日出是每个早晨太阳的一半从地平线探出头的时刻,也指太阳穿过地平线的整个过程及其伴随的大气效应.日落是指由于地球自转导致太阳每天从地平线消失的时刻.从赤道上看,春分和秋分时,太阳从正西方落下.从中纬度地 ...
- 千万不要把Request传递到异步线程里面!有坑!
你好哇,我是歪歪. 前几天在网上冲浪的时候看到一篇技术文章,讲的是他把一个 request 请求传递到了线程池里面,然后遇到了一个匪夷所思的情况. 他写了这篇文章,把自己针对这个问题的探索过程分享了出 ...
- JavaScript进阶内容——jQuery
JavaScript进阶内容--jQuery 我们在前面的文章中已经掌握了JavaScript的全部内容,现在让我们了解一下JavaScript库 这篇文章主要是为了为大家大致讲解JavaScript ...
- 排查jar包使用的第三方包并导出清单
找到jar包 cd /data/xx/lib/xxx/ 解压缩 unzip xxx.jar -d tempjarfile 进入lib目录 cd tempjarfile/BOOT-INF/lib 生产j ...
- JS for in / foreach / for of 超简单对照解释
for in 可以遍历数组/对象/字符串/enumerable对象,得到的是索引,遍历对象时可以写这样 obj[index] 代表对象当前的属性foreach 只能遍历数组,不能遍历字符串.对象for ...
- AI目标分割能力,无需绿幕即可实现快速视频抠图
绿幕抠图是影视制作过程中常见的技术手段,常用于视频中抠除并替换背景,通过后期加工实现视频剪辑制作的更多可能性.然而,绿幕抠图技术制作成本费时费力,无法应用于日常生活. 华为视频编辑服务近期上线目标分割 ...