更改WPF中一个/活动窗口的系统语言

本文关键字:活动 窗口 语言 系统 一个 WPF 更改 | 更新日期: 2023-09-27 18:20:47

是否有可能只为WPF中的一个窗口更改系统语言?

我知道InputLanguageManager,但我认为它改变了整个系统的语言。

更改WPF中一个/活动窗口的系统语言

InputLanguageManager正是您所要求的。它会更改当前应用程序的键盘布局。

操作系统为每个正在运行的应用程序保留键盘布局。例如,如果你打开Notepad并切换到俄语,打开IE并切换到英语,当你激活Notepad应用程序时,你的键盘区域设置仍然是俄语。

以下行仅为当前应用程序更改键盘区域设置:

InputLanguageManager.Current.CurrentInputLanguage = new CultureInfo("el-GR");

系统语言(或者更确切地说,系统语言环境)和键盘布局是完全不同的概念。键盘布局就是键盘的布局。

.NET应用程序中使用了三种不同的区域设置:

  • UI区域设置是用于显示消息和选择本地化的UI字符串和布局的区域设置。您可以通过设置线程的thread.CurrentUICulture属性来更改线程的UI区域设置。其初始值由操作系统在区域设置中的显示语言控制
  • 线程的区域设置用于解析字符串,并将日期和数字转换为字符串。您可以通过设置Thread.CurrentCulture属性来更改它。其原始值由操作系统的区域设置Format属性控制
  • 系统区域设置由非Unicode应用程序使用,或者在写入ASCII文件和控制台时使用

您还可以利用WPF数据绑定,并使用InputLanguage作为附加属性。在XAML中,您可以将InputLanguageManager.InputLanguage属性添加到元素的声明中,如下所示:

<TextBox InputLanguageManager.InputLanguage="en-US"></TextBox>

然后,您可以将属性绑定到代码隐藏或ViewModel中的属性。例如

<TextBox InputLanguageManager.InputLanguage="{Binding MyLanguageInfo}"></TextBox>

将此属性设置为特定值将导致UI元素的键盘发生更改:

MyLanguageInfo = new CultureInfo("en-US");

MyLanguageInfo = new CultureInfo("el-GR");

您可以更进一步,将InputLanguage属性绑定到其他元素,例如语言选项的列表框

对于键盘布局更改,InputLanguageManager是否正确。

InputLanguageManager.SetInputLanguage(this,CultureInfo.CreateSpecificCulture("ru"));

使用SetInputLanguage()方法的第一个参数,可以设置键盘布局的目标DependencyObject