设置文本框的拼写检查语言而不改变键盘语言



我用的是c# &并希望在不改变键盘布局的情况下为文本框设置不同的拼写检查语言。

我发现通过阅读这里的伟大的帖子,它是可以改变输入语言。CurrentInputLanguage用于更改文本框的拼写检查语言。但这也有副作用,键盘布局/语言也被改变了。但是我总是需要一个EN拼写检查我的文本框没有崩溃用户键盘设置。这个案子还有办法吗?

提前感谢每一个提示,可以帮助我解决这个案子。

我已经找到解决这个问题的方法了。

你必须知道,我在Winforms项目中使用WPF文本框。下面是一个示例代码:

System.Windows.Forms.Integration.ElementHost elementHost1 = new System.Windows.Forms.Integration.ElementHost();
System.Windows.Controls.TextBox textBox = new System.Windows.Controls.TextBox();
textBox.Language = System.Windows.Markup.XmlLanguage.GetLanguage("en-GB");
textBox.SpellCheck.IsEnabled = true;
elementHost1.Child = textBox;

使用textBox设置语言。语言不适合我。

如果用户当前选择的输入语言没有为该语言安装拼写字典(即缺少基本键入的按需语言包),则似乎存在拼写检查完全禁用的边缘情况-请参阅此处https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/features-on-demand-language-fod

看下面的例子:

•用户当前选择的语言/键盘为fr-FR

•用户没有"基本类型"为fr-Fr安装了按需功能(因此没有可用的字典)

•用户已经安装了en-GB和"基本打字",所以字典可以用于en-GB。

我想强制文本框在en-GB中进行拼写检查,即使用户的键盘设置为fr-FR。(这样做的原因是我实际上利用了WPF的拼写检查功能来对底层文档进行拼写检查)。

然而,仅仅在文本框中设置Language属性并不能实现这一点。也就是说,即使为语言指定en-GB,拼写检查也不可用。

最后,我暂时将输入语言设置为所需的语言,创建文本框,然后将其更改回用户现有的输入语言。因此,这对用户来说是透明的(即,就用户而言,它不会干扰他们当前的输入语言)。

InputLanguage original_language = InputLanguage.CurrentInputLanguage;
System.Globalization.CultureInfo my_culture = new System.Globalization.CultureInfo("en-GB");
InputLanguage c = InputLanguage.FromCulture(my_culture);
InputLanguage.CurrentInputLanguage = c;
System.Windows.Controls.TextBox testBox = new System.Windows.Controls.TextBox();
testBox.SpellCheck.IsEnabled = true;
elementHost1.Child = testBox;
InputLanguage.CurrentInputLanguage = original_language;

请注意,一旦文本框被创建并绑定到elementthost,如果您将输入语言更改回来,则无关紧要—该文本框的语言将永久设置为创建时的语言。

因此,在上面的例子中,用户最终会看到拼写检查工作在英式英语中,但他或她的键盘仍然设置为法语。

实际上,上面有额外的代码来检查您设置的语言(在本例中为en-GB)是否实际安装。

最新更新