是否有一种简单的方法可以将生成的InlineObjectElements设为只读?我正在考虑使用自定义ReadOnlySectionProvider。有没有办法从保持更新的InlineObjectElement获取TextSegment?或者我是否需要从InlineObjectElement创建自己的TextSegment?如果是这样,我如何获得TextSegment的开始和结束偏移?
答案 0 :(得分:1)
InlineObjectElement
仅在文本行位于可见区域时按需生成。因此,如果用户在按Del之前滚动,则InlineObjectElement
只读是不会阻止它被删除。
您必须编写与IReadOnlySectionProvider
匹配的VisualElementGenerator
实现,以便保护将导致内联元素生成的文本片段。
如果您确实需要知道现有InlineObjectElement
的开始/结束偏移:
int start = parentVisualLine.StartOffset + element.RelativeTextOffset;
int end = start + element.DocumentLength;
如果您不知道父VisualLine
的起始偏移量,则无法确定偏移量。但是你应该总是知道它,因为你要么自己在生成器中创建元素(在这种情况下它是context.VisualLine
),要么在parentVisualLine.Elements
集合中找到元素。