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

时间:2013-07-03 11:43:51

标签: c# wpf windows

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

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

2 个答案:

答案 0 :(得分:14)

InputLanguageManager完全符合您的要求。它会更改当前应用程序的键盘布局。

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

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

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

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

.NET应用程序中使用了三种不同的语言环境:

  • UI语言环境是用于显示消息并选择本地化UI字符串和布局的语言环境。您可以通过设置Thread.CurrentUICulture属性来更改线程的UI语言环境。其初始值由操作系统在区域设置中的显示语言控制
  • 线程的语言环境用于解析字符串并将日期和数字转换为字符串。您可以通过设置Thread.CurrentCulture属性来更改它。其原始值由操作系统的区域设置格式属性
  • 控制
  • 系统区域设置由非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属性绑定到其他元素,例如。语言选项列表框

答案 1 :(得分:2)

对于键盘布局更改,你是正确的InputLanguageManager

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

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

相关问题