我想弄清楚如何在 IWpfTextView 中获取可见线,以根据可见线放置 ViewPort 和/或文本装饰。
似乎这 4 个以某种方式参与,至少是 Span。为了确保我理解,Span 只是 TextView 中的一系列字符,对吗?
最佳答案
IWpfTextView.TextViewLines
是可见线条的集合。在某些情况下,第一行和最后一行可能隐藏或部分可见(但第二行和倒数第二行应始终完全可见)。要获取完全可见的线条集合,您可以使用 IWpfTextView.TextViewLines.FirstVisibleLine
和 IWpfTextView.TextViewLines.LastVisibleLine
,或通过 ITextViewLine.VisibilityState == 过滤集合VisibilityState.FullyVisible
.
Span
是一个包含起始位置和长度的结构,但它不包含实际文本。 VS Editor 中有多种用于不同目的的跨度,例如 SnapshotSpan
是 ITextSnapshot
的跨度,它存储起始位置、长度和快照它属于。
编辑:
抱歉,我错过了标题中的问题。
一个Point
是指一个位置,一个Span
是指一个范围。大多数将一个作为参数的 VS 编辑器 API 都对另一个进行了重载。
ITrackingPoint
和 ITrackingSpan
脱离了 ITextBuffer
。 “跟踪”意味着它们随着文本缓冲区的变化而偏移/增长/收缩。它们与快照无关。
SnapshotPoint
和 SnapshotSpan
脱离了 ITextSnapshot
。它们绑定(bind)到 ITextSnapshot
并且是不可变的。
ITextViewLine
是用于显示的格式化行。通常您不需要更改它,只需从中获取视觉信息,如 Height
或 VisibilityState
。
关于c# - ITrackingPoint、ITrackingSpan、SnapshotPoint、SnapshotSpan、ITextViewLine 之间有什么区别以及何时使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10107152/