WPF 拼写检查在内部是如何工作的?

How does WPF Spellchecking Work Internally?

在为当前项目开发界面时,我意识到 WPF 内置了可用于文本框等的拼写检查。我不知道为什么这让我感到惊讶,但确实如此。也许是因为我已经习惯了 Winforms,它没有拼写检查功能。

我完全没有意识到这一点,更重要的是,我什至从未注意到在运行时加载了这样的功能,这让我有点吃惊。你会认为加载单词列表会导致某种启动时间限制,因为内置词典显然非常好;我试图测试它的功能,它提供了我什至认为不会出现在标准词典中的单词。

所以基本上,我真的只是想知道这样的功能是如何在运行时初始化的。 WPF 如何处理加载单词?它是否会在计算机启动时将加载延迟到 windows 环境?每次应用程序启动时它都会加载字典吗?所述词典是否位于磁盘上某种可访问级别以便我可以查看它?

WPF 使用 COM 互操作来利用 Windows 中内置的拼写支持。这确实取决于您拥有的版本。对于 Windows 8 及更高版本,它使用已记录的 api。拼写检查器由 ISpellCheckerFactory and friends, implemented by c:\windows\system32\MsSpellCheckingFacility.dll. And it calls in the help of a WinRT class to break up a sentence into words, Windows.Data.Text.WordSegmenter 完成。

这些组件在 Win7 及更低版本上均不可用,然后回退到由 c:\windows\system32\NaturalLanguage6.dll 实现的 COM 服务,ILexicon 是主要接口。 Microsoft 未记录该文件,但在 reference source.

中可见