WPF Richtextbox 中的自动更正

AutoCorrect in WPF Richtextbox

我在 MSDN 上看到 .NET 4.6.1 现在支持自动更正。 %appdata%/Microsoft/Spelling// 中的文件是自动创建的,我将以下行添加到 default.acl(文件仍然是带 BOM 的 UTF-16):

tramampoline|trampoline

我已将项目设置为目标 4.6.1 并在 RichTextBox 上启用拼写检查:

<RichTextBox SpellCheck.IsEnabled="True" Language="de-DE"/>

虽然它会以通常的方式突出显示输入错误的单词,但不会发生自动更正。

我在这里错过了什么? 我不太明白注释:

Note: These new file-formats are not directly supported by the WPF spell checking API’s, and the custom dictionaries supplied to WPF in applications should continue to use .lex files.

我知道这已经过时了,但据我所知,您需要自己处理自动更正(如果我错了,请举例说明)。您可以按如下方式执行此操作:

var caretPosition = richTextBox.CaretPosition;
// Make sure you're passing a textpointer at the end of the word you want to correct, i.e. not like this ;)
errorPosition = richTextBox.GetNextSpellingErrorPosition(caretPosition, LogicalDirection.Backward);
if(errorPosition == null)
{
    return;
}

var errors = richTextBox.GetSpellingError(errorPosition);
// Default would be to only replace the text if there is one available replacement
// but you can also measure which one is most likely with a simple string comparison
// algorithm, e.g. Levenshtein distance
if (errors.Suggestions.Count() == 1) 
{
    var incorrectTextRange = richTextBox.GetSpellingErrorRange(errorPosition);
    var correctText = error.Suggestions.First();
    var incorrectText = incorrectTextRange.Text;

    // Correct the text with the chosen word...
    errors.Correct(correctText);
}

// Set caret position...

一个重要的注意事项是不要使用 RTB 的 CaretPosition,而是在您要更正的单词的末尾使用文本指针。如果您的 textpointer/caret 位于一个奇怪的位置(例如 20 个空格的末尾),GetNextSpellingErrorPosition 方法可能需要 60 秒才能到达 returns(取决于您的 hardware/number 中的单词实时出价)。