2012-02-10 20 views
7

Devo evidenziare tutte le occorrenze della parola selezionata in AvalonEdit. Ho creato un'istanza della classe HihglinghtingRule:Evidenzia tutte le occorrenze della parola selezionata in AvalonEdit

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

Cosa devo fare dopo? Grazie.

risposta

7

Per utilizzare che HighlightingRule, si dovrà creare un'altra istanza del motore di evidenziazione (HighlightingColorizer etc.)

E 'più facile e più efficiente per scrivere un DocumentColorizingTransformer che mette in evidenza la tua parola:

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

* Grazie mille! * –

+0

Non vedo come questo risponda alla domanda. L'utente voleva un comportamento in cui tutte le parole vengono evidenziate in un testo se corrispondono. Lo fa qualcosa di simile allo studio visivo. – Devid

Problemi correlati