【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内推和技术交流)

完结。谢谢大佬们围观。

Original: https://www.cnblogs.com/weskynet/p/16703187.html
Author: WeskyNet
Title: 【WPF】实现动态切换语言(国际化)以及动态换肤功能

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/802472/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 面试突击86:SpringBoot 事务不回滚?怎么解决?

    在 Spring Boot 中,造成事务不自动回滚的场景有很多,比如以下这些: 非 public 修饰的方法中的事务不自动回滚; 当 @Transactional 遇上 try/c…

    Python 2023年10月20日
    056
  • 订单自动确认或取消设计方案

    订单自动确认或取消设计方案 前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。 系统订单自动确认或取消的设计方案,最常见的一个业务比如N天后自动确认订单,达到动态修改订单状态的目…

    Python 2023年10月11日
    044
  • SA实战 · 《SpringCloud Alibaba实战》第02章-专栏设计

    作者:冰河星球:http://m6z.cn/6aeFbs博客:https://binghe001.github.io文章汇总:https://binghe001.github.io…

    Python 2023年10月8日
    044
  • AI 真要成精了?ChatGPT 上手体验

    能力 2022 年,人工智能 (AI) 在很多领域发挥了威力。相信你已经看到或听到不少新闻了。 ,现在这样的图片,人工智能都能根据你的要求绘制出来。 (资料来源:t.ly/8VUL…

    Python 2023年9月28日
    067
  • Pygame使用测试(三)

    使用帧数 计算机的速度非常快,可以在一秒钟内完成数百万个循环周期。现在显然,这对我们人类来说有点快。作为参考,电影以每秒 24 帧的速度运行。任何小于这个值的东西都会有明显的卡顿,…

    Python 2023年9月23日
    063
  • 源码分析之序列化器的many关键字

    在序列多个数据时,我们需要指定一个关键字many=True 这是为什么呢? 其实是,当序列化器产生对象时,传入参数many和不传入会生成两个不同的对象!! 这是怎么实现的呢?? 1…

    Python 2023年10月31日
    045
  • Pandas库

    抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。 Original: https://blo…

    Python 2023年8月17日
    059
  • chatgpt+mirai实现QQ机器人

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年11月4日
    040
  • pygame 文字绘制机制

    pygame 文字绘制机制 文字绘制机制 * 文字绘制 系统中的字体 Font类 – Font类的绘制方法1 Font类的绘制方法2 文字绘制机制 文字绘制 pygam…

    Python 2023年9月22日
    054
  • 学习 27 门编程语言的长处,提升你的 Python 代码水平

    Python猫注:Python 语言诞生 30 年了,如今的发展势头可谓如火如荼,这很大程度上得益于其易学易用的优秀设计,而不可否认的是,Python 从其它语言中偷师了不少。本文…

    Python 2023年5月24日
    064
  • 【机器学习】李宏毅——类神经网络训练不起来怎么办

    如何判断导数值为零的点的类型 当发现训练数据集误差不再下降的时候, 不是只有卡在局部最小值的情况,还有另外一种情况 是处于鞍点,鞍点位置处 虽然其导函数为零,但是其既不是局部最大值…

    Python 2023年10月24日
    045
  • Flutter写的博客园客户端

    几个月前在博客园发帖说要用 Flutter写个客户端,版本也在陆陆续续的迭代当中,软件也日臻完善起来,想着就把它开源以作Flutter学习。 目前软件已经上线 Goolge Pla…

    Python 2023年10月11日
    043
  • web自动化-pytest

    安装pytest,pytest-html 1. 特点 1、非常容易上手,入门简单,文档丰富,文档中有很多参考实例 2、支持简单的单元测试和复杂的功能测试 3、支持参数化 4、执行测…

    Python 2023年9月12日
    032
  • python 中画球体_Matplotlib/basemap:在p的中心绘制一个球体

    我试图在python中找出如何使用basemap来绘制如下图: 聚焦于左上角的图,这是一个二维的密度直方图,每个箱子的中心都有一个地球图形。在 我面临的最大问题是,基本地图并没有发…

    Python 2023年9月6日
    045
  • VsCode[Git] | 配置Gitee和Github | 不使用全局用户名和邮箱

    (VsCode[Git] | 配置Gitee和Github | 不使用全局用户名和邮箱 | 2021-04-11) 一 、安装Git / VsCode配置Git / Win10系统…

    Python 2023年6月12日
    088
  • 目前报错汇总-持续更新

    报错: raise AttributeError(‘Unknown property %s’ % k) AttributeError: Unknown pr…

    Python 2023年9月3日
    056
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球