Frage

Ich möchte dem Standard einen Menüelement hinzufügen ContextMenu von a RichTextBox.

Ich könnte ein neues Kontextmenü erstellen, aber dann verliere ich die Vorschläge zur Überprüfung des Zaubersprüchens, die im Standardmenü angezeigt werden.

Gibt es eine Möglichkeit, einen Artikel hinzuzufügen, ohne alles neu zu implementieren?

War es hilfreich?

Lösung

Es ist nicht allzu schwierig, das RichtextBox -Kontextmenü mit Rechtschreibvorschlägen, Schnitt, Einfügen usw. neu zu implementieren.

Verbinden Sie das Ereignis des Kontextes wie folgt:

AddHandler(RichTextBox.ContextMenuOpeningEvent, new ContextMenuEventHandler(RichTextBox_ContextMenuOpening), true);

Erstellen Sie im Event -Handler das Kontextmenü, wie Sie benötigen. Sie können die vorhandenen Menüelemente des vorhandenen Kontextmenü mit Folgendes neu erstellen:

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;
}

Wenn es Rechtschreibfehler gibt, können Sie alle ignorieren mit:

MenuItem ignoreAllMI = new MenuItem();
ignoreAllMI.Header = "Ignore All";
ignoreAllMI.Command = EditingCommands.IgnoreSpellingError;
ignoreAllMI.CommandTarget = textBox;
newContextMenu.Items.Add(ignoreAllMI);

Fügen Sie nach Bedarf Separatoren hinzu. Fügen Sie diese den Elementen des neuen Kontextmenüs hinzu und fügen Sie dann Ihre glänzenden neuen Menuitems hinzu.

Ich werde jedoch weiter nach einem Weg suchen, um das tatsächliche Kontextmenü zu erhalten, da dies für etwas relevant ist, an dem ich in naher Zukunft arbeiten werde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top