我正在试图找出如何在I
WpfTextView中获取可见行以基于可见线放置ViewPort和/或文本装饰.
似乎这4个涉及某种方式,至少是Spans.为了确保我理解,Span只是TextView中的一系列字符吗?
解决方法
IWpfTextView.TextViewLines是可见行的集合.在某些情况下,第一行和最后一行可能是隐藏的或部分可见的(但第二行和倒数第二行应始终完全可见).要获取完全可见的行集合,可以使用IWpfTextView.TextViewLines.FirstVisibleLine和IWpfTextView.TextViewLines.LastVisibleLine,或者通过ITextViewLine.VisibilityState == VisibilityState.FullyVisible过滤集合.
Span是一个用于包装起始位置和长度的结构,但它不包含实际文本. VS编辑器中有多种跨度用于不同目的,例如,SnapshotSpan是ITextSnapshot的跨度,它存储起始位置,长度及其所属的快照.
编辑:
对不起,我错过了标题中的问题.
Point指的是一个位置,Span指的是一个范围.以参数为参数的大多数VS Editor API都会为另一个提供过载.
ITrackingPoint和ITrackingSpan不属于ITextBuffer. “跟踪”意味着它们随着文本缓冲区的变化而偏移/增大/缩小.它们是快照不可知的.
SnapshotPoint和SnapshotSpan不在ITextSnapshot中.它们绑定到ITextSnapshot并且是不可变的.
ITextViewLine是用于显示的格式化行.通常您不需要更改它,只需从Height或VisibilityState获取视觉信息.