【问题标题】:Change system language for one/active window in WPF更改 WPF 中一个/活动窗口的系统语言
【发布时间】:2013-07-09 18:33:28
【问题描述】:

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

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

【问题讨论】:

  • “系统”语言是什么意思?用于显示消息和标签的语言还是用于解析输入的语言?几乎所有受语言影响的函数都接受 IFormatProvider 参数,您可以使用该参数传递所需的 CultureInfo
  • 这个意思是改变你的Application中的输入键盘布局吗?
  • 它是我在整个操作系统中使用的语言。
  • @Smartis ,是的,我必须更改西里尔语(俄罗斯)的屏幕键盘语言。
  • 更改整个操作系统的语言与更改单个窗口的语言完全相反

标签: c# wpf windows


【解决方案1】:

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 属性绑定到其他元素,例如。语言选项列表框

【讨论】:

  • 嘿伙计,你能给我一个这个工具的完整例子吗?
【解决方案2】:

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

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

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

【讨论】:

  • InputLanguage 是 Windows 窗体类,而不是 WPF 类
  • 好的,但是如果用户在系统中没有俄语怎么办?
  • 那你必须在Windows系统上安装它。
  • SetInputLanguage 不应直接在代码中使用。它支持 InputLanguage 附加属性
  • 在 Windows Vista 及以上版本中无需“安装”键盘布局,只需转到语言栏、设置并选择附加键盘即可。 .NET 已经使用 Unicode,因此无论您如何输入俄语文本都会正确显示
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
相关资源
最近更新 更多