2008-10-16 15 views
8

RichTextBox'un ContextMenu numaralı standardına bir menü öğesi eklemek istiyorum.Varsayılan içerik menüsüne menü öğesini ekle

Yeni bir içerik menüsü oluşturabilirim ancak sonra varsayılan menüde görünen yazım denetimi önerilerini kaybederim.

Her şeyi yeniden uygulamadan bir öğe eklemenin bir yolu var mı?

cevap

16

O vb yazım tavsiyeleri Kes, Yapıştır ile RichTextBox içerik menüsünü yeniden gerçeklemek çok zor değil

aşağıdaki gibi içerik menüsü açma olayı bağlayın: olay işleyicisi yapı içinde

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

İhtiyacınız olan içerik menüsü. Aşağıdaki mevcut bağlam menüsünü menü öğelerini yeniden oluşturabilirsiniz: yazım hatası yoksa

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

, Ignore All ile oluşturabilirsiniz: gerektiği gibi

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

ayırıcılar ekleyin. Bunları yeni içerik menüsünün öğelerine ekleyin ve ardından parlak yeni MenuItems'inizi ekleyin.

Güncel bağlam menüsünü elde etmenin bir yolunu aramaya devam edeceğim, çünkü bu yakın gelecekte üzerinde çalışacağım bir şeyle alakalı.

+0

Teşekkürler, Donnelle. Yeniden uygulanmaya başlayacağını düşündüm. Bunun nasıl yapılacağına dair ipuçları için teşekkürler! – dmo

+1

Çok benzer bir örnek doğrudan MSDN'de bulunabilir: http://msdn.microsoft.com/en-us/library/system.windows.controls.richtextbox.getspellingerror(v=vs.110).aspx –

+0

@ Donnelle Partiye geç kaldığım için üzgünüm, ama aynı soruna (basit bir metin kutusuna sahip olan senaryonun dışında) ve WPF etiketine sahip olduğum için, daha fazla "XAMLish" yolu sağlayabilir misiniz lütfen? – Yoda