WPF TextBox的SpellCheck功能

本文探讨了如何在WPF环境中利用TextBox的SpellCheck功能进行拼写检查。通过引用MSDN的官方示例和一篇详细的博客文章,了解如何启用和配置SpellCheck,并研究了SpellingError类的可能性,以实现更丰富的用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看一看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类,看看能不能玩出什么花样.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值