WPF文本框拼写检查突出显示整个文本而不是更改单词

时间:2015-04-27 12:24:00

标签: wpf xaml visual-studio-2013 spell-checking

我的部分我的文本框有问题。我已经对它们启用了拼写检查,当一个单词拼写错误时,它会被强调为红色,右键单击会让我选择替换单词。这一切都很好,正如预期的那样。

我遇到的麻烦是,当我选择一个替换词时,而不是纠正我的文本,整个文本块都会突出显示,而且这个词保持不变。

在我的所有文本框中都没有发生这种情况,奇怪的是,如果它是拼写错误的句子中的第一个单词,那么拼写检查工具会按预期正常工作并正确替换该单词。

<TextBox x:Name="TxtBugDescription" Grid.Row="3" Grid.Column="1" TextWrapping="Wrap" Padding="3" SpellCheck.IsEnabled="True" Margin="5" VerticalAlignment="Stretch" AcceptsReturn="True" />

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

我们也遇到了这个问题!感谢Spellcheck only replaces first word in TextBox,我们终于明白了。

我们在App.xaml.cs中有这个代码,只要它得到焦点,它就会突出显示(选择)文本框中的所有文本。这似乎是放弃拼写检查的东西。

//In the App.xaml.cs file
EventManager.RegisterClassHandler(typeof(TextBox), UIElement.GotKeyboardFocusEvent, 
    new RoutedEventHandler(SelectAllText));

private static void SelectAllText(object sender, RoutedEventArgs e)
    {
        var tb = (sender as TextBox);
        if (tb != null)
            tb.SelectAll();
    }

我们决定使用此代码的主要用例是在表格中进行选项卡,因此我们将其更改为仅发生在选项卡上,该选项卡允许拼写检查仍然有效。

//Changed the method to only set focus when the tab was pressed
private static void SelectAllText(object sender, RoutedEventArgs e)
{
    if (e.RoutedEvent == Keyboard.GotKeyboardFocusEvent)
    {
        if (!Keyboard.IsKeyDown(Key.Tab))
            return;
    }
    var tb = (sender as TextBox);
    if (tb != null)
        tb.SelectAll();
}

其他人可能只想删除它。