将菜单项添加到默认上下文菜单

10

我想在默认 RichTextBox 的上下文菜单中添加一个菜单项。

我可以创建一个新的上下文菜单,但这样我就失去了默认菜单中出现的拼写检查建议。

有没有一种方法可以在不重新实现所有内容的情况下添加一个菜单项?

1个回答

17

重新实现 RichTextBox 上下文菜单,包括拼写建议、剪切、粘贴等功能并不难。

以下是打开上下文菜单事件的连接方法:

AddHandler(RichTextBox.ContextMenuOpeningEvent, new ContextMenuEventHandler(RichTextBox_ContextMenuOpening), true);

在事件处理程序中按需要构建上下文菜单。你可以用以下方法重新创建现有的上下文菜单项:

private IList<MenuItem> GetSpellingSuggestions()
{
    List<MenuItem> spellingSuggestions = new List();
    SpellingError spellingError = myRichTextBox.GetSpellingError(myRichTextBox.CaretPosition);
    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 = myRichTextBox;
            spellingSuggestions.Add(mi);
        }
    }
    return spellingSuggestions;
}

private IList<MenuItem> GetStandardCommands()
{
    List<MenuItem> standardCommands = new List();
MenuItem item = new MenuItem(); item.Command = ApplicationCommands.Cut; standardCommands.Add(item);
item = new MenuItem(); item.Command = ApplicationCommands.Copy; standardCommands.Add(item);
item = new MenuItem(); item.Command = ApplicationCommands.Paste; standardCommands.Add(item);
return standardCommands; }

如果存在拼写错误,可以使用以下代码创建“忽略全部”:

MenuItem ignoreAllMI = new MenuItem();
ignoreAllMI.Header = "忽略全部";
ignoreAllMI.Command = EditingCommands.IgnoreSpellingError;
ignoreAllMI.CommandTarget = textBox;
newContextMenu.Items.Add(ignoreAllMI);

按需要添加分隔符,将它们添加到新上下文菜单的项中,然后添加你全新的 MenuItems。

我会继续寻找获取实际上下文菜单的方法,因为这与我即将要处理的某些事情有关。


谢谢,Donnelle。我想可能需要重新实现。感谢您提供如何做到这一点的提示! - dmo
2
在MSDN上也可以找到非常相似的示例:http://msdn.microsoft.com/en-us/library/system.windows.controls.richtextbox.getspellingerror(v=vs.110).aspx - Steve Cadwallader
@Donnelle 抱歉来晚了,但是由于我遇到了完全相同的问题(除了我的场景只有一个简单的文本框),而且这个问题有WPF标签,你能提供一种更“XAML风格”的方法吗? - Yoda
我想做,Yoda,但我已经7年没用XAML了! - Donnelle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接