Pregunta

Me gustaría agregar un elemento de menú al ContextMenu predeterminado de un RichTextBox .

Podría crear un nuevo menú contextual pero luego pierdo las sugerencias de corrección ortográfica que aparecen en el menú predeterminado.

¿Hay alguna forma de agregar un elemento sin volver a implementar todo?

¿Fue útil?

Solución

No es demasiado complicado volver a implementar el menú contextual RichTextBox con sugerencias de ortografía, Cortar, Pegar, etc.

Conecte el evento de apertura del menú contextual de la siguiente manera:

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

Dentro del controlador de eventos, cree el menú contextual según lo necesite. Puede volver a crear los elementos de menú del menú contextual existentes con lo siguiente:

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

Si hay errores ortográficos, puede crear Ignorar todo con:

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

Agregue separadores según sea necesario. Agréguelos a los elementos del nuevo menú contextual y luego agregue sus nuevos y brillantes MenuItems.

Sin embargo, seguiré buscando una forma de obtener el menú contextual real, ya que esto es relevante para algo en lo que estaré trabajando en el futuro cercano.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top