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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top