WPF TextBox的SpellCheck功能

来源:互联网 发布:知乎怎么更新答案 编辑:程序博客网 时间:2024/05/21 17:24

看一看MSDN的例子是最好的:

http://msdn.microsoft.com/zh-cn/library/vstudio/system.windows.controls.primitives.textboxbase.spellcheck(v=vs.100).aspx

给例子做一下注释:

        public MainWindow()        {            InitializeComponent();            myTextBox.ContextMenu = GetContextMenu();//初始化右键菜单(上下文菜单)        }                 void tb_ContextMenuOpening(object sender, RoutedEventArgs e)        {            int caretIndex, cmdIndex;            SpellingError spellingError;            myTextBox.ContextMenu = GetContextMenu();//获取默认菜单            caretIndex = myTextBox.CaretIndex;//光标位置            cmdIndex = 0;//菜单项序号            spellingError = myTextBox.GetSpellingError(caretIndex);//获取当前光标处错误,如果没有拼写错误则为null            if (spellingError != null)            {                //对拼写错误的每一个推荐正确拼写, 建立一个菜单项                foreach (string str in spellingError.Suggestions)                {                    MenuItem mi = new MenuItem();                    mi.Header = str;//菜单项的文本内容                    mi.FontWeight = FontWeights.Bold;                    mi.Command = EditingCommands.CorrectSpellingError;//菜单项点击执行的命令,是一个更改当前光标处拼写错误的命令.                    mi.CommandParameter = str;//这个命令的参数                    mi.CommandTarget = myTextBox;//这个命令执行的目标文本框                    myTextBox.ContextMenu.Items.Insert(cmdIndex, mi);//把该项加入右键菜单的序号位置                    cmdIndex++;//序号自增                }                Separator separatorMenuItem1 = new Separator();                myTextBox.ContextMenu.Items.Insert(cmdIndex, separatorMenuItem1);//插入一个分割横线                cmdIndex++;                MenuItem ignoreAllMI = new MenuItem();//新建一个菜单项,功能是忽略所有拼写错误                ignoreAllMI.Header = "Ignore All";                ignoreAllMI.Command = EditingCommands.IgnoreSpellingError;                ignoreAllMI.CommandTarget = myTextBox;                myTextBox.ContextMenu.Items.Insert(cmdIndex, ignoreAllMI);                cmdIndex++;                Separator separatorMenuItem2 = new Separator();                myTextBox.ContextMenu.Items.Insert(cmdIndex, separatorMenuItem2);//再插入一个分割线,之后就是默认的菜单项.            }        }        private ContextMenu GetContextMenu()        {            ContextMenu cm = new ContextMenu();            //Can create STATIC custom menu items if exists here...            MenuItem m1, m2, m3, m4;            m1 = new MenuItem();            m1.Header = "File";//m1.Command = ApplicationCommands.Save;            m2 = new MenuItem();            m2.Header = "Save";            m3 = new MenuItem();            m3.Header = "SaveAs";            m4 = new MenuItem();            m4.Header = "Recent Files";            //Can add functionality for the custom menu items here...            cm.Items.Add(m1);            cm.Items.Add(m2);            cm.Items.Add(m3);            cm.Items.Add(m4);            return cm;        }

可以在SpellCheck的CustomDictionaries里定义用户词典, 拼写检查会忽略这些词.

http://www.cnblogs.com/gnielee/archive/2010/05/04/wpf4-spellcheck.html 这篇文章给出了一个详细例子.

接着是研究SpellingError类,看看能不能玩出什么花样.



0 0
原创粉丝点击