ajouter un élément de menu au menu contextuel par défaut
-
03-07-2019 - |
Question
J'aimerais ajouter un élément de menu au ContextMenu
par défaut d'un RichTextBox
.
Je pouvais créer un nouveau menu contextuel mais je perdais ensuite les suggestions de vérification orthographique figurant dans le menu par défaut.
Y a-t-il un moyen d'ajouter un élément sans tout ré-implémenter?
La solution
Il n'est pas trop difficile de réimplémenter le menu contextuel RichTextBox avec des suggestions orthographiques, Couper, Coller, etc.
Connectez l'événement d'ouverture du menu contextuel comme suit:
AddHandler(RichTextBox.ContextMenuOpeningEvent, new ContextMenuEventHandler(RichTextBox_ContextMenuOpening), true);
Dans le gestionnaire d'événements, construisez le menu contextuel selon vos besoins. Vous pouvez recréer les éléments de menu existants du menu contextuel avec les éléments suivants:
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; }
S'il y a des fautes d'orthographe, vous pouvez créer Tout ignorer avec:
MenuItem ignoreAllMI = new MenuItem(); ignoreAllMI.Header = "Ignore All"; ignoreAllMI.Command = EditingCommands.IgnoreSpellingError; ignoreAllMI.CommandTarget = textBox; newContextMenu.Items.Add(ignoreAllMI);
Ajoutez des séparateurs si nécessaire. Ajoutez-les aux éléments du nouveau menu contextuel, puis ajoutez vos nouveaux éléments de menu brillants.
Je vais cependant continuer à chercher un moyen d'obtenir le menu contextuel, car il s'agit d'un élément sur lequel je vais travailler dans un proche avenir.