2008-10-16 16 views
8

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

Pude crear un nuevo menú contextual pero luego pierdo las sugerencias de revisión ortográfica que aparecen en el menú predeterminado.

¿Hay alguna manera de agregar un artículo sin volver a implementarlo todo?

Respuesta

16

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

Conecta el evento de apertura menú contextual de la siguiente manera:

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

Dentro de la estructura de controlador de eventos el menú contextual que necesita Puede volver a crear los elementos de menú del menú contextual actual por el 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 de ortografía, puede crear Ignorar todo con:

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

Añadir separadores según sea necesario. Añádelos a los nuevos elementos del menú contextual y luego agrega tus nuevos ítems de menú brillantes.

Sin embargo, voy a seguir buscando la forma de obtener el menú contextual real, ya que esto es relevante para algo en lo que trabajaré en el futuro cercano.

+0

Gracias, Donnelle. Pensé que probablemente volvería a implementarse. ¡Gracias por los consejos sobre cómo hacer esto! – dmo

+1

También se puede encontrar un ejemplo muy similar directamente en MSDN: http://msdn.microsoft.com/en-us/library/system.windows.controls.richtextbox.getspellingerror(v=vs.110).aspx –

+0

@ Donnelle Perdón por llegar tarde a la fiesta, pero dado que estoy enfrentando exactamente el mismo problema (a excepción de que mi escenario tenga un simple cuadro de texto) y esta pregunta tenga la etiqueta WPF, ¿me pueden dar una forma más "XAMLish", por favor? – Yoda

Cuestiones relacionadas