aggiungi la voce di menu al menu di scelta rapida predefinito
-
03-07-2019 - |
Domanda
Vorrei aggiungere una voce di menu al ContextMenu
predefinito di un RichTextBox
.
Potrei creare un nuovo menu di scelta rapida, ma poi perdo i suggerimenti per il controllo ortografico visualizzati nel menu predefinito.
C'è un modo per aggiungere un elemento senza implementare nuovamente tutto?
Soluzione
Non è troppo complicato reimplementare il menu contestuale RichTextBox con suggerimenti ortografici, Taglia, Incolla, ecc.
Collega l'evento di apertura del menu contestuale come segue:
AddHandler(RichTextBox.ContextMenuOpeningEvent, new ContextMenuEventHandler(RichTextBox_ContextMenuOpening), true);
All'interno del gestore eventi crea il menu contestuale di cui hai bisogno. È possibile ricreare le voci di menu del menu di scelta rapida esistenti con quanto segue:
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; }
Se si verificano errori di ortografia, è possibile creare Ignora tutto con:
MenuItem ignoreAllMI = new MenuItem(); ignoreAllMI.Header = "Ignore All"; ignoreAllMI.Command = EditingCommands.IgnoreSpellingError; ignoreAllMI.CommandTarget = textBox; newContextMenu.Items.Add(ignoreAllMI);
Aggiungi separatori come richiesto. Aggiungili ai nuovi elementi del menu contestuale, quindi aggiungi i tuoi nuovi brillanti MenuItems.
Continuerò a cercare un modo per ottenere il menu contestuale effettivo, poiché è rilevante per qualcosa su cui lavorerò nel prossimo futuro.