首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF Richtextbox中的AutoCorrect

WPF Richtextbox中的AutoCorrect
EN

Stack Overflow用户
提问于 2015-12-17 12:53:34
回答 1查看 939关注 0票数 1

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

代码语言:javascript
复制
tramampoline|trampoline

我已经将项目设置为目标4.6.1,并在SpellCheck上启用了RichTextBox:

代码语言:javascript
复制
<RichTextBox SpellCheck.IsEnabled="True" Language="de-DE"/>

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

我在这里错过了什么?我不太明白这张便条:

注意: WPF拼写检查API不直接支持这些新的文件格式,应用程序中提供给WPF的自定义字典应该继续使用.lex文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-08 17:36:06

我知道这是旧的,但据我所知,您需要自己处理AutoCorrect (如果我错了,请用一个示例纠正我)。您可以这样做:

代码语言:javascript
复制
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中的硬件/字数)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34335108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档