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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top