2012-04-11 51 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获得视觉信息。

相关问题