.NET不借助第三方库实现拼写检查的方案咨询
实现结论
完全可以实现,不需要依赖可见的WPF输入控件,仅通过调用PresentationFramework.dll的相关API即可完成需求。
前置依赖
你的类库项目需要先引用以下WPF核心程序集:
PresentationFramework.dllPresentationCore.dllWindowsBase.dll
核心实现逻辑
不需要创建显示在界面上的TextBox控件,只需要实例化一个内存级别的TextBox对象,开启拼写检查配置后,直接调用其内置的拼写校验API即可。
示例代码
using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Markup; public static class SpellCheckUtility { // 静态复用TextBox实例,避免重复创建的性能开销 private static readonly TextBox _checker = new TextBox { SpellCheck = { IsEnabled = true }, // 可按需指定校验语言,比如英文为en-US,中文为zh-CN Language = XmlLanguage.GetLanguage("en-US") }; /// <summary> /// 校验单词拼写 /// </summary> /// <param name="inputWord">待校验的单词</param> /// <returns>拼写是否正确,以及错误时的拼写建议列表</returns> public static (bool IsCorrect, List<string> Suggestions) CheckSpelling(string inputWord) { if (string.IsNullOrWhiteSpace(inputWord)) { return (true, new List<string>()); } _checker.Clear(); _checker.Text = inputWord.Trim(); // 查找第一个拼写错误的位置 int errorIndex = _checker.GetNextSpellingErrorCharacterIndex(0, LogicalDirection.Forward); // 没有错误直接返回 if (errorIndex < 0) { return (true, new List<string>()); } // 获取拼写错误对应的建议列表 SpellingError error = _checker.GetSpellingError(errorIndex); return (false, error.Suggestions.ToList()); } }
注意事项
- 该实现依赖Windows平台的WPF运行时,不支持跨平台使用。
- WPF控件要求运行在STA线程模型下,如果你的调用线程是MTA线程,需要单独创建STA线程执行校验逻辑。
- 拼写检查的支持语言依赖系统安装的对应语言包,未安装的语言无法完成校验。
内容的提问来源于stack exchange,提问作者Tech Learner
相关产品推荐
相关产品推荐

