我正在使用C#& .Net 4.0并希望在不更改键盘布局的情况下为文本框设置不同的拼写检查语言。
我通过阅读这里的精彩帖子发现,可以更改InputLanguage.CurrentInputLanguage以更改文本框的SpellCheck语言。但这有副作用,键盘布局/语言也发生了变化。但我的文本框总是需要EN拼写检查而不会破坏用户的键盘设置。这种情况有什么办法吗?
在预先感谢每一个可以帮助我解决此案例的提示。
答案 0 :(得分:4)
我发现了,如何解决它。
你必须知道,我在Winforms项目中使用WPF TextBox。以下是示例代码:
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;
答案 1 :(得分:0)
使用textBox设置语言。语言对我不起作用。
如果用户当前选择的输入语言未安装该语言的拼写字典,则似乎存在完全禁用拼写检查的极端情况(即基本键入缺少按需功能语言包) -参见此处https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/features-on-demand-language-fod
采用以下示例:
•用户当前选择的语言/键盘是fr-FR
•用户没有按需安装fr-Fr的“基本打字”功能(因此没有词典)
•用户的确安装了en-GB以及“基本类型”,因此该词典适用于en-GB。
即使用户的键盘设置为fr-FR,我也想强制我的文本框在en-GB中进行拼写检查。 (这样做的原因是,我实际上是背负了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;
请注意,一旦创建了文本框并将其绑定到elementHost,则将输入语言改回就没关系-该文本框的语言将永久设置为创建时的语言。
因此,在上面的示例中,用户最终将使用英语(英语)进行拼写检查,但仍将其键盘设置为法语。
实际上,上面有一些额外的代码可以检查您所设置的语言(在本例中为en-GB)是否已真正安装。