将 InlineObjectElement 设为只读

Making InlineObjectElement read-only

有没有一种简单的方法可以使生成的 InlineObjectElements 成为只读的?我正在考虑使用自定义 ReadOnlySectionProvider。有没有办法从保持更新的 InlineObjectElement 中获取 TextSegment?或者我是否需要从 InlineObjectElement 创建我自己的 TextSegment?如果是这样,我如何获得 TextSegment 的开始和结束偏移量?

InlineObjectElement 仅在文本行位于可见区域时按需生成。因此,如果用户在按 Del 之前滚动离开,则将 InlineObjectElement 设置为只读不会阻止它被删除。

您必须编写与您的 VisualElementGenerator 匹配的 IReadOnlySectionProvider 实现,以便您可以保护将导致生成内联元素的文本片段。


如果您确实需要知道现有 InlineObjectElement 的 start/end 偏移量:

int start = parentVisualLine.StartOffset + element.RelativeTextOffset;
int end = start + element.DocumentLength;

如果您不知道父项的起始偏移量 VisualLine,则无法确定偏移量。但是你应该始终知道它,因为你要么在生成器中自己创建元素(在这种情况下它是 context.VisualLine),要么在 parentVisualLine.Elements 集合中找到该元素。