2008-10-16 145 views
8

我想添加一個菜單項到RichTextBox的默認ContextMenu將菜單項添加到默認的上下文菜單

我可以創建一個新的上下文菜單,但然後我失去了默認菜單中顯示的拼寫檢查建議。

有沒有辦法添加一個項目而不重新實現所有內容?

回答

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

相關問題