AvalonEdit 에서 x,y,length의 단어 highlight
먼저 DocumentColorizingTransformer 를 상속받아 클래스를 하나 만든다.
해당 클래스의 인스턴스는 하나만 만들어 사용해야 함으로 싱글톤이나 static 참조변수로 하나 잡아준다.
그리고, 아래와 비슷한 클래스도 하나 만든다.
해당 클래스의 인스턴스는 하나만 만들어 사용해야 함으로 싱글톤이나 static 참조변수로 하나 잡아준다.
그리고, 아래와 비슷한 클래스도 하나 만든다.
public class Description
{ public int col { set; get; } public int line { set; get; } public int length { set; get; } }
ColorizeLine 메소드를 아래와 비슷하게 override한다.
protected override void ColorizeLine(ICSharpCode.AvalonEdit.Document.DocumentLine line) { if (desiredList == null) return; foreach (Description d in desiredList) { if (line.LineNumber == d.line) { ChangeLinePart(line.Offset + d.col, line.Offset+d.col + d.length, ApplyChanges); } } }그리고, highlight 부분을 udpate 해줄려면
private void Button_Click(object sender, RoutedEventArgs e){ int x = int.Parse(txt1.Text); int y = int.Parse(txt2.Text); Description[] d = new Description[]{ new Description(){col=x,line=y,length=2}, new Description(){col=x+2,line=y+2,length=2} }; lc.setList(d); textEditor.TextArea.TextView.LineTransformers.Remove(lc); textEditor.TextArea.TextView.LineTransformers.Add(lc); }하면된다.
실제로 ColorizeLine 메소드는 해당 VisualLine의 요소만을 Rendering할수 있는듯하다. 산으로가는 프로젝트 마무리 단계라 코드분석할 시간도 없이 마구잡이로 적용중이다.그리고, desiredList 가 갱신된다고 해서 화면이 갱신되지는 않지만 LineTransformers 에서 제거한다음 추가하면 전체 내용이 갱신된다.(VisualLine을 다시 그려줌, 그때 내가 만든 Colorize 클래스가 호출됨)
ColorizeLine에서 current line 이외의 라인을 수정할려고하면 exception이 발생한다.
===============추가 =================
TextView에 Redraw 메소드가 있다. remove했다가 add 할 필요없이 Redraw() 를 호출 해주면된다.
댓글
댓글 쓰기