ITrackingPoint,ITrackingSpan,SnapshotPoint,SnapshotSpan,ITex

本文关键字:ITex SnapshotSpan ITrackingSpan ITrackingPoint SnapshotPoint | 更新日期: 2023-09-27 18:30:40

我正在尝试弄清楚如何在IWpfTextView中获取可见线条,以基于可见线条放置视口和/或文本装饰。

似乎这 4 个以某种方式参与其中,至少是跨度。 为了确保我理解,跨度只是文本视图中的一系列字符,对吗?

ITrackingPoint,ITrackingSpan,SnapshotPoint,SnapshotSpan,ITex

IWpfTextView.TextViewLines是可见线条的集合。在某些情况下,第一行和最后一行可能隐藏或部分可见(但第二行和倒数第二行应始终完全可见)。要获取完全可见行的集合,您可以使用 IWpfTextView.TextViewLines.FirstVisibleLineIWpfTextView.TextViewLines.LastVisibleLine ,或按 ITextViewLine.VisibilityState == VisibilityState.FullyVisible 过滤集合。

Span是换行起始位置和长度的结构,但它不包含实际文本。VS Editor 中有许多种跨度用于不同的目的,例如SnapshotSpanITextSnapshot的跨度,它存储起始位置、长度和它所属的快照。

编辑:

对不起,我错过了标题中的问题。

Point表示位置,Span表示范围。大多数将一个作为参数的 VS 编辑器 API 对另一个具有重载。

ITrackingPointITrackingSpan都离开了ITextBuffer."跟踪"意味着它们会随着文本缓冲区的变化而偏移/增长/缩小。它们与快照无关。

SnapshotPointSnapshotSpan都离开了ITextSnapshot.它们与ITextSnapshot绑定并且是不可变的。

ITextViewLine是用于显示的格式化行。通常你不需要改变它,只需要从中获取视觉信息,如HeightVisibilityState