2008-10-16 38 views
8

Tôi muốn thêm mục menu vào mặc định ContextMenu của số RichTextBox.thêm mục menu vào menu ngữ cảnh mặc định

Tôi có thể tạo menu ngữ cảnh mới nhưng sau đó tôi mất các đề xuất kiểm tra chính tả hiển thị trong trình đơn mặc định.

Có cách nào để thêm mục mà không cần triển khai lại mọi thứ không?

Trả lời

16

Nó không phải quá khó khăn để reimplement menu ngữ cảnh RichTextBox với gợi ý chính tả, Cut, Paste vv

Treo lên sự kiện mở menu ngữ cảnh như sau:

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

Trong xử lý sự kiện xây dựng menu ngữ cảnh khi bạn cần. Bạn có thể tái tạo các mục trình đơn menu ngữ cảnh hiện như sau:

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

Nếu có lỗi chính tả, bạn có thể tạo Bỏ qua Tất cả với:

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

Thêm dải phân cách theo yêu cầu. Thêm các mục đó vào các mục của menu ngữ cảnh mới và sau đó thêm các MenuItems mới sáng bóng của bạn.

Tôi sẽ tiếp tục tìm kiếm một cách để có được menu ngữ cảnh thực tế, vì điều này có liên quan đến điều tôi sẽ làm việc trong tương lai gần.

+0

Cảm ơn, Donnelle. Tôi nghĩ rằng nó có lẽ sẽ đến để tái thực hiện. Cảm ơn những lời khuyên về cách làm điều này! – dmo

+1

Một ví dụ rất giống nhau có thể được tìm thấy trực tiếp trên MSDN: http://msdn.microsoft.com/en-us/library/system.windows.controls.richtextbox.getspellingerror(v=vs.110).aspx –

+0

@ Donnelle Xin lỗi vì đã đến trễ bữa tiệc, nhưng vì tôi đang đối mặt với cùng một vấn đề (ngoại trừ trường hợp của tôi có một hộp văn bản đơn giản) và câu hỏi này có thẻ WPF, bạn có thể cung cấp thêm cách "XAMLish" không? – Yoda

Các vấn đề liên quan