agregar elemento de menú al menú contextual predeterminado
-
03-07-2019 - |
Pregunta
Me gustaría agregar un elemento de menú al ContextMenu
predeterminado de un RichTextBox
.
Podría crear un nuevo menú contextual pero luego pierdo las sugerencias de corrección ortográfica que aparecen en el menú predeterminado.
¿Hay alguna forma de agregar un elemento sin volver a implementar todo?
Solución
No es demasiado complicado volver a implementar el menú contextual RichTextBox con sugerencias de ortografía, Cortar, Pegar, etc.
Conecte el evento de apertura del menú contextual de la siguiente manera:
AddHandler(RichTextBox.ContextMenuOpeningEvent, new ContextMenuEventHandler(RichTextBox_ContextMenuOpening), true);
Dentro del controlador de eventos, cree el menú contextual según lo necesite. Puede volver a crear los elementos de menú del menú contextual existentes con lo siguiente:
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; }
Si hay errores ortográficos, puede crear Ignorar todo con:
MenuItem ignoreAllMI = new MenuItem(); ignoreAllMI.Header = "Ignore All"; ignoreAllMI.Command = EditingCommands.IgnoreSpellingError; ignoreAllMI.CommandTarget = textBox; newContextMenu.Items.Add(ignoreAllMI);
Agregue separadores según sea necesario. Agréguelos a los elementos del nuevo menú contextual y luego agregue sus nuevos y brillantes MenuItems.
Sin embargo, seguiré buscando una forma de obtener el menú contextual real, ya que esto es relevante para algo en lo que estaré trabajando en el futuro cercano.