2008-10-16 4 views
8

Я хотел бы добавить пункт меню по умолчанию ContextMenu из RichTextBox.добавить пункт меню в контекстное меню по умолчанию

Я мог бы создать новое контекстное меню, но затем я потеряю подсказки проверки орфографии, которые отображаются в меню по умолчанию.

Есть ли способ добавить товар без повторной реализации всего?

ответ

16

Это не слишком сложно переописать контекстное RichTextBox меню с орфографическими предложениями, вырезание, вставка и т.д.

Подключайте событие открытия контекстного меню следующим образом:

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

В пределах сборки обработчика событий контекстное меню по мере необходимости. Вы можете обновить существующие пункты меню контекстного меню со следующим:

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

Если есть орфографические ошибки, вы можете создать Игнорировать все с:

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

Добавить разделители по мере необходимости. Добавьте их в элементы нового контекстного меню, а затем добавьте новые блестящие элементы MenuItems.

Я собираюсь продолжить поиск контекстного меню, поскольку это имеет отношение к чему-то, над чем я буду работать в ближайшем будущем.

+0

Спасибо, Доннеле. Я решил, что это, вероятно, придет к повторной реализации. Спасибо за советы о том, как это сделать! – dmo 2008-10-20 18:44:49

Смежные вопросы