使InlineObjectElement成为只读

时间:2015-04-05 21:15:55

标签: c# wpf avalonedit

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

1 个答案:

答案 0 :(得分:1)

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

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


如果您确实需要知道现有InlineObjectElement的开始/结束偏移:

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

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