我想在默认 RichTextBox
的上下文菜单中添加一个菜单项。
我可以创建一个新的上下文菜单,但这样我就失去了默认菜单中出现的拼写检查建议。
有没有一种方法可以在不重新实现所有内容的情况下添加一个菜单项?
我想在默认 RichTextBox
的上下文菜单中添加一个菜单项。
我可以创建一个新的上下文菜单,但这样我就失去了默认菜单中出现的拼写检查建议。
有没有一种方法可以在不重新实现所有内容的情况下添加一个菜单项?
重新实现 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。
我会继续寻找获取实际上下文菜单的方法,因为这与我即将要处理的某些事情有关。