我在MSDN上读到.NET 4.6.1现在支持自动更正。 %appdata%/ Microsoft / Spelling //中的文件是自动创建的,我将以下行添加到default.acl(文件仍然是带有BOM的UTF-16):
tramampoline|trampoline
我已将项目设置为目标4.6.1并在RichTextBox上启用了SpellCheck:
<RichTextBox SpellCheck.IsEnabled="True" Language="de-DE"/>
虽然它以通常的方式突出显示错误的单词,但没有发生自动更正。
我在这里缺少什么? 我不太明白这个说明:
注意:WPF拼写检查API不直接支持这些新的文件格式,应用程序中提供给WPF的自定义词典应继续使用.lex文件。
答案 0 :(得分:0)
我知道这很旧,但是据我所知,您需要自己处理自动更正(如果我错了,请举个例子来纠正我)。您可以按照以下步骤进行操作:
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,而应在要纠正的单词的末尾使用文本指针。如果您的文本指针/插入符号很奇怪(例如20个空格的末尾),则GetNextSpellingErrorPosition方法最多可能需要60秒才能返回(取决于硬件/ RTB中的单词数)。