如何在运行时在WPF中正确添加启用拼写检查的文本框

本文关键字:检查 文本 启用 运行时 WPF 添加 | 更新日期: 2023-09-27 17:53:14

情况:我想添加在运行时启用拼写检查的文本框到WPF窗口。系统在德语设置("de")下运行,拼写检查语言应该是英语。下面的代码只在一个文本框聚焦时按预期工作。

private void AddTextBoxButton_Click(object sender, RoutedEventArgs e)
{
        TextBox txtBox = new TextBox();            
        InputLanguageManager.SetInputLanguage(txtBox, CultureInfo.CreateSpecificCulture("en"));
        txtBox.SpellCheck.IsEnabled = true;
        stackPanel.Children.Add(txtBox);
}

示例:我点击"添加文本框"按钮。一个文本框被添加到stackpanel。但是这个文本框只知道德语进行拼写检查。如果这个文本框是聚焦的,我添加另一个文本框到stackpanel,新的文本框支持英文拼写检查。

演示拼写检查示例的屏幕截图

这种行为的原因是什么?我希望,在运行时添加到stackpanel的每个文本框将从一开始就使用英语拼写检查。

下面是XAML代码。

<Window x:Class="WpfSpellCheckStackOverflow.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">    
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="40"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Button Name="AddTextBoxButton" Content="Add a textbox" Click="AddTextBoxButton_Click" Margin="4" ></Button>
        <StackPanel Name="stackPanel" Grid.Row="1" Margin="4"></StackPanel>
    </Grid>
</Window>

如何在运行时在WPF中正确添加启用拼写检查的文本框

文本框控件的拼写检查语言是根据以下规则依次选择的:

  1. xml:lang属性被使用(仅当指定时)
  2. 当前输入语言
  3. 当前线程的区域性

您的解决方案是使用以下命令:

txtBox.Language = System.Windows.Markup.XmlLanguage.GetLanguage("en");

代替:

InputLanguageManager.SetInputLanguage(txtBox, CultureInfo.CreateSpecificCulture("en"));