原文:WPF 4 单词拼写检查(SpellCheck)

     在WPF中 Textbox 和RichTextBox 控件都内置了拼写检查属性,但该属性目前默认仅支持English、Spanish、French 和German 四种语言。

·        #LID 1033 – English
·        #LID 3082 – Spanish
·        #LID 1031 – German
·        #LID 1036 - French

使用拼写检查功能时,只需将SpellCheck.IsEnabled 设为True 即可。

<Grid>
<TextBox SpellCheck.IsEnabled="True" />
</Grid>

拼写错误的单词下方会显示红色波浪线,右击单词将提示相关纠正单词。

下面示例通过使用SpellingError 类将纠正单词获取到ListBox 中供使用者参考。

<StackPanel HorizontalAlignment="Center" Margin="20">
<TextBox x:Name="txtBox" SpellCheck.IsEnabled="True"
MouseRightButtonUp="txtBox_MouseRightButtonUp" />
<ListBox x:Name="listBox" ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
private void txtBox_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
int catatPos = txtBox.CaretIndex;
SpellingError error = txtBox.GetSpellingError(catatPos);
if (error != null)
{
foreach (string suggession in error.Suggestions)
{
listBox.Items.Add(suggession);
}
}
}

在错误单词后面点击鼠标右键,便会将纠正单词写入下方列表中。

     在WPF 4 中SpellCheck 增加了CustomDictionaries 功能,可以使开发人员添加默认语言中未包含或被忽略的单词,以便进行自定义单词拼写检查。上例录入的文字中“Micrsoft Visual Stvdio WPF 4” ,其实我们认为“WPF” 并不是拼写错误,只是由于默认的四种语言中并不存在“WPF”这个单词,因此我们可以通过自定义词典将“WPF”设置为可识别单词。

首先打开Notepad 编写词典文件(.lex),在文件中按以下格式编写单词内容:

#LID 1033
Word1
Word2
Word3

     文档中的第一行为词典适用的语言种类(英语),若不编写该行意为适用于所有语言,其他语言Locale ID 信息可参考这里。结合本篇实例我们只需在文档写入“WPF”单词即可,将编辑好的词典文件加入项目中:

为TextBox 添加自定义词典:

<Window x:Class="WPFTextTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=System">
<StackPanel HorizontalAlignment="Center" Margin="20">
<TextBox x:Name="txtBox" SpellCheck.IsEnabled="True">
<SpellCheck.CustomDictionaries>
<sys:Uri>pack://application:,,,/Lexicon/MSWord.lex</sys:Uri>
</SpellCheck.CustomDictionaries>
</TextBox>
</StackPanel>
</Window>

运行程序输入同样内容,可见“WPF”已经不被标识为拼写错误:

最新文章

  1. AMD 和 CMD 的区别有哪些?
  2. mongodb命令使用大全(常用命令)
  3. POJ 2418 字典树
  4. 【java消息格式化】使用MessageFormat进行消息格式化
  5. 核心Javascript学习
  6. BZOJ 1593: [Usaco2008 Feb]Hotel 旅馆
  7. HDU5791--Two (DP)
  8. linux删除、读取文件原理
  9. python读取文件通过正则过滤需要信息然后保存到新文件里
  10. system2之:4-LVM逻辑卷管理
  11. 【SQL】查询语句中in和exists的区别
  12. XTU 1246 Heartstone
  13. HDU 3625 Examining the Rooms:第一类stirling数
  14. springmvc注解
  15. SPI、I2C、UART(转)
  16. 推荐一款强大的3D家装开源软件
  17. PAT1126:Eulerian Path
  18. 爬虫框架之Scrapy(四 ImagePipeline)
  19. JSON字符串反序列化成对象_部分属性值反序列化失败
  20. vuejs 70行代码实现便签功能

热门文章

  1. USB 3.0规范中译本 第5章 机械结构
  2. Ext.Ajax.request用法
  3. Fragment嵌套Fragment时遇到的那些坑
  4. iOS中打电话、打开网址、发邮件、发短信等
  5. 使用Redis做产品统计的两种模式
  6. Hibernate的数据操作(4.*以上版本)
  7. SQL表的默认常用数据类型
  8. 【项目积累】对JSON数据的处理
  9. 改变事件绑定的this的问题
  10. [Android]Fragment自定义动画、动画监听以及兼容性包使用