добавить пункт меню в контекстное меню по умолчанию
-
03-07-2019 - |
Вопрос
Я бы хотел добавить пункт меню по умолчанию ContextMenu
из a 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 = "Ignore All"; ignoreAllMI.Command = EditingCommands.IgnoreSpellingError; ignoreAllMI.CommandTarget = textBox; newContextMenu.Items.Add(ignoreAllMI);
Добавляйте разделители по мере необходимости.Добавьте их к пунктам нового контекстного меню, а затем добавьте свои блестящие новые элементы MenuItems.
Однако я собираюсь продолжать искать способ получить фактическое контекстное меню, поскольку это имеет отношение к тому, над чем я буду работать в ближайшем будущем.