c# - ITrackingPoint、ITrackingSpan、SnapshotPoint、SnapshotSpan、ITextViewLine 之间有什么区别以及何时使用?

标签 c# .net wpf visual-studio-2010 vs-extensibility

我想弄清楚如何在 IWpfTextView 中获取可见线,以根据可见线放置 ViewPort 和/或文本装饰。

似乎这 4 个以某种方式参与,至少是 Span。为了确保我理解,Span 只是 TextView 中的一系列字符,对吗?

最佳答案

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

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

编辑:

抱歉,我错过了标题中的问题。

一个Point是指一个位置,一个Span是指一个范围。大多数将一个作为参数的 VS 编辑器 API 都对另一个进行了重载。

ITrackingPointITrackingSpan 脱离了 ITextBuffer。 “跟踪”意味着它们随着文本缓冲区的变化而偏移/增长/收缩。它们与快照无关。

SnapshotPointSnapshotSpan 脱离了 ITextSnapshot。它们绑定(bind)到 ITextSnapshot 并且是不可变的。

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

关于c# - ITrackingPoint、ITrackingSpan、SnapshotPoint、SnapshotSpan、ITextViewLine 之间有什么区别以及何时使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10107152/

相关文章:

c# - .NET Core UseCors() 不添加 header

c# - 与泛型类型方法的接口(interface)

wpf - 使用 Mahapps.Metro 在 WPF 中设计汉堡菜单

wpf - prism5 regionManager.RequestNavigate 显示 System.object

.net - 将 .Net 面板控件导出到图像

wpf - 将复选框列表绑定(bind)到选中值列表的最简单方法是什么

c# - 程序在访问消息队列时挂起

c# - 使用通配符在 csproj 中包含内容

c# - Entity Framework Core 2.1 无法正确翻译查询

c# - Entity Framework 中的两列外键