InputLanguageManager 完全符合您的要求。它更改当前应用程序的键盘布局。
操作系统为每个正在运行的应用程序保留键盘布局。例如。如果您打开记事本并切换到俄语,打开 IE 并切换到英语,当您激活记事本应用程序时,您的键盘区域设置仍然是俄语。
以下行仅更改当前应用程序的键盘区域设置:
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 属性绑定到其他元素,例如。语言选项列表框