2012-04-11 23 views
7

我想弄清楚如何讓IWpfTextView中的可見線放置基於可見線的ViewPort和/或文本裝飾。ITrackingPoint,ITrackingSpan,SnapshotPoint,SnapshotSpan,ITextViewLine和何時使用有什麼區別?

看來,這4個參與方式,至少是斯潘斯。爲了確保我理解,Span只是TextView中的一系列字符?

+0

好吧,我自己更新。 – Chris 2012-04-11 20:18:08

+1

忘了實際更新。 1. TextViews不被認爲是行。這是因爲大綱,文字換行等不同於TextBuffer與可視緩衝區。 2. SnapshotSpan vs SnapshotPoint - Span代表一串字符。點,一個字符。 3. TrackingPoint vs TrackingSpan。與其他Point和Span類似,除了用於確定ViewPort中的位置。 我想我對這些都是正確的。或者至少似乎是這樣。 – Chris 2012-05-06 13:40:35

回答

6

IWpfTextView.TextViewLines是可見行的集合。在某些情況下,第一行和最後一行可能隱藏或部分可見(但第二行和倒數第二行應始終完全可見)。要獲得完全可見的行的集合,您可以使用IWpfTextView.TextViewLines.FirstVisibleLineIWpfTextView.TextViewLines.LastVisibleLine,或者通過ITextViewLine.VisibilityState == VisibilityState.FullyVisible過濾集合。

A Span是一個結構來包裝起始位置和長度,但它不包含實際的文本。 VS編輯器中有多種跨度用於不同的用途,例如SnapshotSpan是從ITextSnapshot開始的跨度,它存儲起始位置,長度和它所屬的快照。

編輯:

對不起,我錯過了在標題中的問題。

A Point指的是一個位置,Span指的是一個範圍。大多數採用一個參數的VS編輯器API對另一個有重載。

ITrackingPointITrackingSpan關閉ITextBuffer。 「跟蹤」意味着它們隨着文本緩衝區的改變而抵消/增大/縮小。它們是快照不可知的。

SnapshotPointSnapshotSpan關閉ITextSnapshot。他們被綁定到ITextSnapshot並且是不可變的。

ITextViewLine是用於顯示的格式化行。通常你不需要改變它,只從HeightVisibilityState獲得視覺信息。

相關問題