资讯详情

WPF 拼写检查实战:解读 WPF-Samples 的 Spell Checking 示例(TextBox / RichTextBox)

📅 2026/10/15 2:36:34 | 华诺云谱 👁 阅读
WPF 拼写检查实战:解读 WPF-Samples 的 Spell Checking 示例(TextBox / RichTextBox)
示例工程【免费下载链接】WPF-SamplesRepository for WPF related samples项目地址https://gitcode.com/gh_mirrors/wp/WPF-Samples点击查看免费下载WPF 内置的拼写检查Spell Checking功能可以基于 .NET 与 Windows 的拼写检查组件为TextBox、RichTextBox等文本编辑控件提供自动纠错标注与拼写建议。本篇文章以 WPF-Samples 仓库中的 Spell Checking 示例 为主体逐行拆解其 XAML 与 C# 实现讲清楚如何用一行属性开启拼写检查、如何通过GetSpellingError()与Suggestions程序化获取建议词以及如何利用SpellCheck.CustomDictionaries接入自定义词典让你能在自己的 WPF 应用中直接复刻这套方案。示例概览一个完整的拼写检查演示窗口该示例位于仓库的Documents/Spell Checking/SpellChecking/目录是一个独立的 WinExe WPF 应用。从 项目文件 可以看到其采用 SDK 风格工程目标框架为net10.0-windows并启用了UseWPFProject SdkMicrosoft.NET.Sdk PropertyGroup OutputTypeWinExe/OutputType TargetFrameworknet10.0-windows/TargetFramework UseWPFtrue/UseWPF /PropertyGroup /Project应用入口通过 App.xaml 的StartupUriMainWindow.xaml指向主窗口核心逻辑全部集中在 MainWindow.xaml 与 MainWindow.xaml.cs 中。窗口整体演示了四件事在TextBox中开启拼写检查自动标注拼写错误的词在RichTextBox中开启拼写检查并展示多语言英语 / 意大利语混排下的按语言校验提供一个输入单词 → 点击 Check → 输出建议列表的交互面板用代码方式而非仅 XAML 声明获取指定单词的拼写建议。构建与运行示例按 README 的说明获取并运行该示例的方式如下适用于 Visual Studio 2022 及以上版本获取代码不熟悉 Git 的情况下可直接下载仓库的 ZIP 压缩包并解压然后在 Visual Studio 中打开示例工程。部署示例在 Visual Studio 中选择生成 部署解决方案Build Deploy Solution。调试运行按F5或选择调试 开始调试Debug Start Debugging。免调试运行按CtrlF5或选择调试 开始执行不调试Debug Start Without Debugging。示例工程不依赖外部 NuGet 包仅使用 WPF 内置能力因此打开工程后直接运行即可看到效果。在 TextBox 中开启拼写检查一个附加属性的事WPF 的拼写检查通过附加属性SpellCheck.IsEnabled控制它定义在System.Windows.Controls.SpellCheck类上可以作用于TextBoxBase的派生控件TextBox、RichTextBox。示例在 MainWindow.xaml 中这样使用Label Grid.Row0 ContentTextBox/ TextBox Grid.Row1 SpellCheck.IsEnabledTrueThis is a mispeled word./TextBox关键点在于SpellCheck.IsEnabledTrue一行即可让 TextBox 内所有文本参与拼写校验拼错的单词会被红色波浪线自动标注示例初始文本This is a mispeled word.中的mispeled就是故意写错的词用于直观展示标注效果由于拼写检查是对控件整体生效的用户在此 TextBox 中输入的新内容同样会被实时校验。RichTextBox 中的拼写检查与多语言混排拼写检查同样适用于富文本控件。示例在 MainWindow.xaml 中为RichTextBox开启了拼写检查并在FlowDocument中放置了分别声明为英语与意大利语的RunRichTextBox Grid.Row3 SpellCheck.IsEnabledtrue AcceptsReturnTrue RichTextBox.Document FlowDocument Paragraph Run xml:langen-us FontWeightBoldMispeled/Run Run xml:langen-us word in English/Run LineBreak/ Run xml:langit-it FontWeightBoldErratd/Run Run xml:langit-it parola in italiano/Run /Paragraph /FlowDocument /RichTextBox.Document /RichTextBox这段 XAML 揭示了拼写检查的几个重要设计SpellCheck.IsEnabledtrue对富文本同样生效RichTextBox内部的FlowDocument文本会参与校验xml:lang决定校验语言每个Run上通过xml:lang声明语言标记如en-us英语与it-it意大利语。示例中Mispeled、Erratd分别是英、意两种语言下故意拼错的词WPF 会按各自声明的语言进行校验并标出错误AcceptsReturnTrue允许用户在编辑时按回车换行便于输入多段落内容后观察逐段校验效果加粗强调FontWeightBold只是用来在视觉上突出错词与拼写检查机制本身无关说明拼写标注与文本格式可以并存。需要说明的是WPF 拼写检查默认依赖英语拼写组件若要让it-it等非英语语言生效通常需要在系统中安装对应的语言支持组件例如 Office 语言包提供的拼写词典。这也是示例特意使用xml:lang声明而非依赖全局语言的原因——通过语言标记可精确控制每一段文本的校验语言。程序化获取拼写建议GetSpellingError 与 Suggestions除了在界面上展示波浪线示例还演示了如何在代码中主动查询某个单词的拼写建议这是将拼写检查能力集成到搜索、自动纠错、词典功能中的常用手段。核心实现位于 MainWindow.xaml.cspublic static IReadOnlyListstring GetSuggestions(string word) { TextBox textBox new TextBox() { Text word }; textBox.SpellCheck.IsEnabled true; return textBox.GetSpellingError(0).Suggestions.ToList().AsReadOnly(); } private void OnCheckWordForSpellingSuggestions(object sender, RoutedEventArgs e) { var word txtBoxWord.Text; if (!string.IsNullOrEmpty(word)) { var suggestions GetSuggestions(word); if (suggestions?.Count 0) { lbSuggestions.ItemsSource suggestions; } } }这段代码的价值在于拼写建议并不一定需要界面上存在可见的输入框——示例通过new TextBox()创建一个隐形的临时 TextBox把待查单词塞进其Text属性并启用拼写检查后即可调用 API 取回结果。整个流程分为三步构造临时控件并启用检查textBox.SpellCheck.IsEnabled true;注意这里是通过代码设置附加属性与 XAML 中的声明等价定位错误textBox.GetSpellingError(0)从字符索引0处开始查找拼写错误返回SpellingError对象若该位置不存在错误则返回null读取建议SpellingError.Suggestions是IEnumerablestring示例将其通过ToList().AsReadOnly()包装为只读列表返回并在OnCheckWordForSpellingSuggestions事件处理器中绑定到ListBox显示。与之配套的交互面板在 MainWindow.xaml 中定义左侧是Check word for spelling-suggestions输入框txtBoxWord与 Check 按钮按钮的Click事件绑定了OnCheckWordForSpellingSuggestions右侧是lbSuggestions列表框用于展示建议词列表。两点值得注意的边界情况可从代码结构推断当txtBoxWord.Text为空时事件处理器直接返回不会触发查询GetSuggestions内部对GetSpellingError(0)的返回值未做判空若查询的是拼写正确的单词该位置无错误GetSpellingError(0)会返回null直接访问.Suggestions将抛出空引用异常。在实际项目中建议将实现改为先判空再访问例如var error textBox.GetSpellingError(0); return error ! null ? error.Suggestions.ToList().AsReadOnly() : new Liststring().AsReadOnly();延伸用 CustomDictionaries 接入自定义词典拼写检查的实用场景中专业术语总被标红是最常见的痛点。仓库中同目录下的姊妹示例 CustomDictionaries 正好演示了解决方案通过附加属性SpellCheck.CustomDictionaries挂载.lex词典文件把合法词加入白名单。其 MainWindow.xaml 用法如下TextBox SpellCheck.IsEnabledTrue TextWrappingWrapWithOverflow SpellCheck.CustomDictionaries sys:Uripack://application:,,,/CustomDictionary.lex/sys:Uri /SpellCheck.CustomDictionaries Nonsense words like brimborion and jabberwocky are not identified as errors because they are included in CustomDictionary.lex. ... /TextBox关键机制SpellCheck.CustomDictionaries是一个集合属性接收Uri列表每个 Uri 指向一个.lex词典文件使用 Pack URI 引用pack://application:,,,/CustomDictionary.lex表示从应用程序包中加载该资源文件因此需要把CustomDictionary.lex作为资源随应用一起发布.lex文件格式极简CustomDictionary.lex 的内容就是逐行罗列的单词每行一个合法词brimborion jabberwocky生效范围词典内的词不再被判定为错误而真正拼错的词依旧会被正确标注从而在保留纠错能力的同时消除误报。将该机制与本篇主示例结合即可得到完整的拼写检查方案TextBox/RichTextBox开启SpellCheck.IsEnabled做自动标注通过xml:lang处理多语言借助GetSpellingError().Suggestions提供建议词再用自定义词典收纳领域词汇。核心 API 一览与实战要点综合主示例与自定义词典示例可以总结出 WPF 拼写检查的四组核心 APIAPI / 属性类型作用示例出处SpellCheck.IsEnabled附加属性bool开启/关闭控件的拼写检查SpellChecking/MainWindow.xamlSpellCheck.CustomDictionaries附加属性Uri 集合挂载.lex自定义词典CustomDictionaries/MainWindow.xamlTextBoxBase.GetSpellingError(int charIndex)方法从指定字符索引返回SpellingError无错误时返回nullSpellChecking/MainWindow.xaml.csSpellingError.Suggestions属性IEnumerablestring当前错误的候选建议词列表SpellChecking/MainWindow.xaml.cs实战中的几条经验一行开启SpellCheck.IsEnabledTrue是 TextBox 与 RichTextBox 通用的开关无需任何额外配置即可获得默认英语拼写标注多语言靠xml:lang在FlowDocument的Run或Span上声明语言标记让同一文档内不同语言的文本各按各的词典校验建议词查询可脱离 UI用临时 TextBox GetSpellingError即可在任意代码路径中获取建议但记得对GetSpellingError的返回值判空自定义词典消灭误报把产品名、人名、领域术语逐行写入.lex文件再通过 Pack URI 挂载即可在保持纠错能力的同时避免专业词被标红。小结WPF-Samples 的 Spell Checking 示例用不到百行代码完整覆盖了 WPF 拼写检查从声明到编程调用的全链路SpellCheck.IsEnabled负责界面标注xml:lang负责多语言路由GetSpellingError()与Suggestions负责程序化查询配合SpellCheck.CustomDictionaries可进一步定制词典。对需要在 WPF 应用中集成拼写纠错、建议词查询或专业词典功能的开发者来说这套源码就是最直接的可运行参考实现。赞分享示例工程【免费下载链接】WPF-SamplesRepository for WPF related samples项目地址https://gitcode.com/gh_mirrors/wp/WPF-Samples点击查看免费下载相关推荐WPF 拼写检查自定义字典Custom Dictionaries示例详解让 TextBox 识别专业术语与虚构词WPF 拼写检查自定义字典Custom Dictionaries示例详解让 TextBox 识别专业术语与虚构词 本篇技术指南聚焦 WPF Samples示例工程WPF 层级数据绑定实战深入解析 WPF-Samples 的 HierarchicalDataTemplate 示例WPF 层级数据绑定实战深入解析 WPF Samples 的 HierarchicalDataTemplate 示例 导读 在 WPF 开发中列表里嵌套列示例工程Zsh 与 Bash 全面对比面向 refine 工程实践的命令行与脚本指南Zsh 与 Bash 全面对比面向 refine 工程实践的命令行与脚本指南 本篇指南系统对比 Unix 世界两大主流 Shell——BashBourne示例工程上一篇OpCore Simplify终极教程如何在30分钟内完成专业级黑苹果配置下一篇Python跨平台应用开发终极指南为什么Toga是开发者的首选方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑