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");
or
MyLanguageInfo = new CultureInfo("el-GR");
您可以更进一步,将 InputLanguage 属性绑定到其他元素,例如。语言选项列表框