WPF界面语言切换
举例中英文切换:
一、静态切换(每次切换需要重启应用)
1. 新建一个WPF APP(.NET Framework)项目,StaticLanguageSelect
2. 右击项目名,添加New Item,选择Resources File类型,取名为Resources.en-us.resx,把该文件拖放到Properties下,如图:

3. 使用键值对形式,在Resources.resx中存储所需的中文表示,在Resources.en-us.resx中存储所需的英文表示,如图:
注意:中文资源文件Resources.resx的Access Modifier要改成public


4. 在Properties下的Settings.settings中,新建一项,用来存储当前线程的Culture。(初始值Value为空,因为后面设置了首次启动适应系统环境。)

后面代码中用到CultureInfo类,是.NET Framework自带的支持多种语言环境和习惯的类,这可以使同一个数据适应不同地区和文化,满足处于不同地区和文化的用户。
5. 接下来在MainWindows.xaml和MainWindows.xaml.cs中写处理代码。
注意:对于.NET Framework 4.5.2版本,这样写在窗体主函数中才起作用,.NET Framework 4.6.2等高版本需要尝试写在APP.xaml.cs中。
1 <Window x:Class="StaticLanguageSelect.MainWindow"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 xmlns:p="clr-namespace:StaticLanguageSelect.Properties"
7 xmlns:local="clr-namespace:StaticLanguageSelect"
8 mc:Ignorable="d"
9 Title="MainWindow" Height="450" Width="800">
10 <Grid>
11 <StackPanel>
12 <TextBlock Text="{x:Static p:Resources.String1}"/>
13 <Button Content="{x:Static p:Resources.SelectLanguage}" Click="Button_Click"/>
14 <Button Content="{x:Static p:Resources.Show}" Click="Button2_Click"/>
15 </StackPanel>
16 </Grid>
17 </Window>
1 using StaticLanguageSelect.Properties;
2 using System.Diagnostics;
3 using System.Globalization;
4 using System.Resources;
5 using System.Threading;
6 using System.Threading.Tasks;
7 using System.Windows;
8
9 namespace StaticLanguageSelect
10 {
11 /// <summary>
12 /// Interaction logic for MainWindow.xaml
13 /// </summary>
14 public partial class MainWindow : Window
15 {
16 private string _name;
17 private ResourceManager _currentResource;
18
19 public MainWindow()
20 {
21 var cultureName = Settings.Default.CultureName;
22
23 //如果Settings中的CultureName不为空,就实例化该种CultureInfo实例,使用它。
24 if (!string.IsNullOrEmpty(cultureName))
25 {
26 try
27 {
28 var cultureInfo = new CultureInfo(cultureName);
29 CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
30 CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
31 }
32 catch (CultureNotFoundException)
33 {
34 throw;
35 }
36 }
37
38 //获取到当前线程的Culture,赋值到Settings设置中,并保存。
39 Settings.Default.CultureName = Thread.CurrentThread.CurrentUICulture.Name;
40 Settings.Default.Save();
41
42 //实例化ResourceManager,来获得当前的Resource配置。
43 _currentResource = new ResourceManager("StaticLanguageSelect.Properties.Resources", typeof(Resources).Assembly);
44
45 InitializeComponent();
46 }
47
48 private void Button_Click(object sender, RoutedEventArgs e)
49 {
50 Settings.Default.CultureName = Thread.CurrentThread.CurrentUICulture.Name == "en-US" ? "zh-CN" : "en-US";
51 Settings.Default.Save();
52
53 Task.Delay(500);
54
55 //重启WPF程序
56 Process.Start(Application.ResourceAssembly.Location);
57 Application.Current.Shutdown();
58 }
59
60 private void Button2_Click(object sender, RoutedEventArgs e)
61 {
62 _name = _currentResource.GetString("Name");
63 MessageBox.Show(_name);
64 }
65 }
66 }
6. 在弹出的子窗体中也关联当前语言:
新建子窗体ChildWindow,后台代码不用写,直接在xaml中关联资源文件中的语言键值对:
<Window x:Class="StaticLanguageSelect.ChildWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:p="clr-namespace:StaticLanguageSelect.Properties"
xmlns:local="clr-namespace:StaticLanguageSelect"
mc:Ignorable="d"
Title="ChildWindow" Height="200" Width="300">
<Grid>
<TextBlock Text="{x:Static p:Resources.String1}"/>
</Grid>
</Window>
主窗体按钮的点击处理程序中,实例化子窗体并显示它:
1 private void Button2_Click(object sender, RoutedEventArgs e)
2 {
3 var childWindow = new ChildWindow();
4 childWindow.ShowDialog();
5 }
运行程序会发现,子窗体的语言与主窗体的一致:


WPF界面语言切换的更多相关文章
- Matlab界面语言切换,自由显示中文或英文语言
Matlab界面语言切换,自由显示中文或英文语言分享给大家,Matlab是一款商业数学软件,广泛使用于算法的开发.数据发现和数值计算等.不同用户对Matlab显示的语言需求也不一样,一用户习惯使用中文 ...
- WPF页面切换及弹窗
WPF页面切换及弹窗 结构如图: 效果如图: 代码如下: xaml <Window x:Class="PageChange.MainWindow" xmlns="h ...
- WPF语言切换,国际化
winform语言切换在每个窗口下面有一个.resx结尾的资源文件,在上面添加新字符串就好了: WPF语言切换跟winform不一样的地方在于需要自己添加资源文件,并且这个资源文件可以写一个,也可以写 ...
- WPF 页面切换效果
原文:WPF 页面切换效果 最近做一个有页面切换的吧.. 我觉得这个功能是比较基础的吧.. 在网上百度了一下.. 用NavigationWindow的比较好.. 因为Demo中是带了淡入淡出的页面效果 ...
- WPF 主题切换(Z)
using System; using System.Windows; using Assergs.Windows; namespace XMLSpy.WPF.Util{ /// <summar ...
- 【转】VS2012 中文版转英文版 英文版转中文版 界面语言切换
[1]下载VS2012的语言包,各种语言包都有,下载对应的即可. 微软官网衔接地址:vs2012 语言包 http://www.microsoft.com/zh-CN/download/detail ...
- wpf图片切换,幻灯效果
xaml: <Window x:Class="WpfApplication1.PicShow" xmlns="http://schemas.microsoft.co ...
- WPF页面切换
XAML <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft. ...
- eclipse界面语言的切换方法
很久以前在我一个朋友的blog上看到过关于eclipse中英文语言界面切换的方法,觉得挺不错,后来自己也用过几次 现在想想,这个方法真的很不错,刚才又在自己机器上做了几次试验,发现eclipse事实上 ...
随机推荐
- Java反射机制及原理
一.概念 java程序运行时动态的创建类并调用类的方法和属性 二.原理简介 Class<?> clz = Class.forName("java.util.ArrayList ...
- Rock Pi开发笔记(一):Rock Pi系列arm产品方案快速落地方案介绍
前言 开发RK3399等相关的项目和产品做评估,最近发现Rock Pi4是一个很好的评估版,价格合适,能满足评估的开发,像树莓派一样留出来引脚接口,是很好的快速落地arm系列产品和项目的较好方案选 ...
- 【XR-4】文本编辑器
直接做是困难的,不妨依照部分分来思考. - Subtask 3 首先会进入一个误区:维护修改,通过循环串的性质在 \(\tt KMP\) 自动机上优化遍历. 但可以发现这样很难处理,我们不妨 直接维护 ...
- [USACO18DEC]The Cow Gathering P
首先可以思考一下每次能删去的点有什么性质. 不难发现,每次能删去的点都是入度恰好为 \(1\) 的那些点(包括 \(a_i \rightarrow b_i\) 的有向边). 换句话说,每次能删去的点既 ...
- 取消a标签的默认行动(跳转到href)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- request和session获取参数的区别
说简单点 request对象和session对象的最大区别是生命周期. request request范围较小一些,只是一个请求. request对象的生命周期是针对一个客户端(说确切点就是一个浏览器 ...
- 获取缓存文件大小并清理 By HL
通常用于删除缓存的时,计算缓存大小 //单个文件的大小 - (long long) fileSizeAtPath:(NSString*) filePath{ NSFileManager* manage ...
- 微信小程序开发提升效率
http://www.ifanr.com/minapp/790017 微信小程序的 API 实现需要兼顾方方面面,所以仍然使用 callback 写法. 众所周知,Callback-Hell(回调地狱 ...
- [01-jwt]C# JWT基础知识详解
本篇文章将介绍jwt基础概念性知识,不含实操代码展示,特别适合该方面知识空白的人群,大神级别请选择性观看.不喜禁喷,出门右转,谢谢配合. 一.什么是JWT? JWT是简写,全称是JSON Web To ...
- Java中stream的详细用法
来自于:Java 8 stream的详细用法_旅行者-CSDN博客_java stream 一.概述 Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行 ...