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

.net 将菜单项添加到默认上下文菜单,.net,wpf,contextmenu,menuitem,.net,Wpf,Contextmenu,Menuitem,我想在RichTextBox的默认ContextMenu中添加一个菜单项 我可以创建一个新的上下文菜单,但是我会丢失默认菜单中显示的拼写检查建议 有没有一种方法可以在不重新实现所有内容的情况下添加一个项目?用拼写建议、剪切、粘贴等重新实现RichTextBox上下文菜单并不难 按如下方式连接上下文菜单打开事件: AddHandler(RichTextBox.ContextMenuOpeningEvent, new ContextMenuEventHandler(RichTextBox_Conte

我想在
RichTextBox
的默认
ContextMenu
中添加一个菜单项

我可以创建一个新的上下文菜单,但是我会丢失默认菜单中显示的拼写检查建议


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

用拼写建议、剪切、粘贴等重新实现RichTextBox上下文菜单并不难

按如下方式连接上下文菜单打开事件:

AddHandler(RichTextBox.ContextMenuOpeningEvent, new ContextMenuEventHandler(RichTextBox_ContextMenuOpening), true); AddHandler(RichTextBox.ContextMenuOpenEvent,新ContextMenuEventHandler(RichTextBox\U 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; } 私有IList GetSpellingSuggestions() { 列表拼写建议=新建列表(); SpellingError SpellingError=myRichTextBox.GetSpellingError(myRichTextBox.CaretPosition); if(拼写错误!=null) { foreach(拼写错误中的字符串str.Suggestions) { MenuItem mi=新的MenuItem(); mi.Header=str; mi.FontWeight=FontWeights.Bold; mi.Command=EditingCommands.CorrectSpellingError; mi.CommandParameter=str; mi.CommandTarget=myRichTextBox; 拼写建议。添加(mi); } } 返回拼写建议; } 私有IList GetStandardCommands() { List standardCommands=newlist(); MenuItem项=新MenuItem(); item.Command=ApplicationCommands.Cut; 标准命令。添加(项); item=新菜单项(); item.Command=ApplicationCommands.Copy; 标准命令。添加(项); item=新菜单项(); item.Command=ApplicationCommands.Paste; 标准命令。添加(项); 返回标准命令; } 如果存在拼写错误,您可以使用以下选项创建“全部忽略”:

MenuItem ignoreAllMI = new MenuItem(); ignoreAllMI.Header = "Ignore All"; ignoreAllMI.Command = EditingCommands.IgnoreSpellingError; ignoreAllMI.CommandTarget = textBox; newContextMenu.Items.Add(ignoreAllMI); MenuItem ignoreAllMI=新的MenuItem(); ignoreAllMI.Header=“全部忽略”; ignoreAllMI.Command=EditingCommands.IgnoreSpellingError; ignoreAllMI.CommandTarget=文本框; newContextMenu.Items.Add(ignoreAllMI); 根据需要添加分隔符。将这些内容添加到新的关联菜单项中,然后添加闪亮的新菜单项


不过,我将继续寻找一种获取实际上下文菜单的方法,因为这与我不久将要研究的内容有关。

谢谢,Donnelle。我想它可能会重新实施。谢谢你的提示如何做到这一点!在MSDN上也可以直接找到一个非常类似的例子:@Donnelle很抱歉参加聚会迟到了,但是由于我面临着完全相同的问题(除了我的场景中有一个简单的文本框),而且这个问题带有WPF标签,你能提供一个更“XAMLish”的方式吗?我很想,Yoda,但我已经7年没有使用XAML了!