Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在运行时在WPF中正确添加启用拼写检查的文本框?_C#_Wpf_Textbox - Fatal编程技术网

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

C# 如何在运行时在WPF中正确添加启用拼写检查的文本框?,c#,wpf,textbox,C#,Wpf,Textbox,情况:我想将运行时启用拼写检查的文本框添加到WPF窗口。系统以德语设置(“de”)运行,拼写检查语言应为英语。 以下代码仅在聚焦一个文本框时按预期工作 private void AddTextBoxButton_Click(object sender, RoutedEventArgs e) { TextBox txtBox = new TextBox(); InputLanguageManager.SetInputLanguage(txtB

情况:我想将运行时启用拼写检查的文本框添加到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>

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

  • 使用xml:lang属性(仅当指定时)
  • 当前输入语言
  • 当前线程的文化
  • 您的解决方案是使用以下各项:

    txtBox.Language = System.Windows.Markup.XmlLanguage.GetLanguage("en");
    
    而不是:

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

    您是否在两次单击之间更改了输入语言?否。输入语言仅由上面显示的代码更改。我只是点击不同的文本框。我只是尝试了你的例子,如果我在第一个和第二个文本框之间更改当前语言,我从您的屏幕截图中得到了确切的行为。第一个文本框是否也使用通过实际单击它或其他函数调用的相同添加函数创建?我现在有时间检查您的解决方案,据我所知,这工作正常。非常感谢你!糟糕的是,关于这个主题的大多数搜索结果都包含我用于(错误的)实现的代码。