将 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
集合中找到该元素。
有没有一种简单的方法可以使生成的 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
集合中找到该元素。