2010-10-21 49 views
3

我嘗試獲取avalonedit控件的可見文本,但VisualLines[]僅處理wordwrap與TextLines[],我不知道如何檢查TextLine是否在可見區域中。AvalonEdit - 可見文本

的問題也將得到解決,如果我能得到TextView的開始 - 和可見的文本endoffset(或長度),但我沒有找到這樣的功能或成員...

誰能幫助我? THX

回答

4

您可以使用TextView.GetPosition檢索文本視圖的角落文檔位置:

TextViewPosition? start = textView.GetPosition(new Point(0, 0) + textView.ScrollOffset); 
TextViewPosition? end = textView.GetPosition(new Point(textView.ActualWidth, textView.ActualHeight) + textView.ScrollOffset); 

您可以使用TextDocument.GetOffset到TextViewPosition轉換成偏移。請注意,如果在可見區域內的指定點處沒有線條時,只有當可見區域的末端位於文檔的末尾時纔會出現此行,則您可以返回null,因此您應該能夠假設結束內的每一個TextLine VisualLine.VisualTop告訴你視線開始的地方(Y座標),並且:

int startOffset = start != null ? document.GetOffset(start.Value.Location) : document.TextLength; 
int endOffset = end != null ? document.GetOffset(end.Value.Location) : document.TextLength; 

但是,如果你願意,你也可以直接與VisualLine/TextLine的工作:在這種情況下的文件VisualLine有一個Height屬性。使用這些,您可以確定哪些文本行可見,然後使用它們的GetCharacterHitFromDistance方法檢索可視列,並使用VisualLine.GetRelativeOffset來計算可視列的文本偏移量。 (這是TextView.GetPosition方法正在做什麼)

+0

Aweseome!現在我的拼寫檢查工作正常。非常感謝你! – zee 2010-10-21 21:31:38

+0

作爲個人參考,以下是AvalonEdit文檔中「TextView.GetPosition」當前參考頁面的鏈接:http://avalonedit.net/documentation/html/070c6779-a358-33f0-09f4-7a3b49d36ee7.htm – wil 2014-11-25 05:19:50