Pergunta

Eu gostaria de adicionar um item de menu ao padrão ContextMenu de um RichTextBox.

Eu poderia criar um novo menu de contexto, mas depois perco as sugestões de verificação ortográfica que aparecem no menu padrão.

Existe uma maneira de adicionar um item sem reimplementar tudo?

Foi útil?

Solução

Não é muito complicado reimplementar o menu de contexto RichTextBox com sugestões de ortografia, corte, pasta, etc.

Conectar o evento de abertura do menu de contexto da seguinte forma:

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

Dentro do manipulador de eventos, construa o menu de contexto conforme necessário. Você pode recriar os itens do menu de contexto existente com o seguinte:

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 houver erros de ortografia, você pode criar ignorar todos com:

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

Adicione separadores conforme necessário. Adicione -os aos itens do novo menu de contexto e, em seguida, adicione seus novos menitems brilhantes.

Vou continuar procurando uma maneira de obter o menu de contexto real, pois isso é relevante para algo em que estarei trabalhando em um futuro próximo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top