2012-02-10 63 views
7

Tôi cần đánh dấu tất cả các lần xuất hiện của từ đã chọn trong AvalonEdit. Tôi đã tạo một phiên bản của lớp HihglinghtingRule:Đánh dấu tất cả các lần xuất hiện của từ đã chọn trong AvalonChỉnh sửa

var rule = new HighlightingRule() 
    { 
     Regex = regex, //some regex for finding occurences 
     Color = new HighlightingColor {Background = new SimpleHighlightingBrush(Colors.Red)} 
    }; 

Tôi nên làm gì sau nó? Cảm ơn.

Trả lời

7

Để sử dụng mà HighlightingRule, bạn sẽ phải tạo một thể hiện của các động cơ nổi bật (HighlightingColorizer vv)

Nó dễ dàng hơn và hiệu quả hơn để viết một DocumentColorizingTransformer làm nổi bật văn bản của bạn:

public class ColorizeAvalonEdit : DocumentColorizingTransformer 
{ 
    protected override void ColorizeLine(DocumentLine line) 
    { 
     int lineStartOffset = line.Offset; 
     string text = CurrentContext.Document.GetText(line); 
     int start = 0; 
     int index; 
     while ((index = text.IndexOf("AvalonEdit", start)) >= 0) { 
      base.ChangeLinePart(
       lineStartOffset + index, // startOffset 
       lineStartOffset + index + 10, // endOffset 
       (VisualLineElement element) => { 
        // This lambda gets called once for every VisualLineElement 
        // between the specified offsets. 
        Typeface tf = element.TextRunProperties.Typeface; 
        // Replace the typeface with a modified version of 
        // the same typeface 
        element.TextRunProperties.SetTypeface(new Typeface(
         tf.FontFamily, 
         FontStyles.Italic, 
         FontWeights.Bold, 
         tf.Stretch 
        )); 
       }); 
      start = index + 1; // search for next occurrence 
     } 
    } 
} 
+0

* Cảm ơn rất nhiều! * –

+0

Tôi không thấy cách này trả lời câu hỏi. Người dùng muốn có hành vi trong đó tất cả các từ được đánh dấu trong văn bản nếu chúng khớp nhau. Một cái gì đó tương tự như studio trực quan không. – Devid

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