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

问题描述:

我想添加一个菜单项到RichTextBox的默认ContextMenu将菜单项添加到默认的上下文菜单

我可以创建一个新的上下文菜单,但然后我失去了默认菜单中显示的拼写检查建议。

有没有办法添加一个项目而不重新实现所有内容?

这不是太棘手重新实现拼写建议,剪切,粘贴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 = "Ignore All"; 
ignoreAllMI.Command = EditingCommands.IgnoreSpellingError; 
ignoreAllMI.CommandTarget = textBox; 
newContextMenu.Items.Add(ignoreAllMI); 

根据需要添加分隔符。将这些添加到新的上下文菜单的项目中,然后添加闪亮的新MenuItems。

虽然我将继续寻找获取实际上下文菜单的方法,因为这与我将在不久的将来进行的工作相关。

+0

谢谢,唐纳尔。我想它可能会重新实施。感谢关于如何做到这一点的提示! – dmo 2008-10-20 18:44:49