Создание InlineObjectElement только для чтения

Есть ли простой способ сделать сгенерированные InlineObjectElements только для чтения? Я думаю об использовании пользовательского ReadOnlySectionProvider. Есть ли способ получить TextSegment из InlineObjectElement, который постоянно обновляется? Или мне нужно создать свой собственный TextSegment из InlineObjectElement? Если да, то как мне получить смещение начала и конца TextSegment?

1 ответ

Решение

InlineObjectElement генерируется только по требованию, когда текстовая строка находится в видимой области. Делая InlineObjectElement таким образом, только для чтения не будет препятствовать его удалению, если пользователь прокручивает страницу перед нажатием Del.

Вам придется написать IReadOnlySectionProvider реализация, которая соответствует вашему VisualElementGenerator так что вы можете защитить фрагменты текста, которые будут вызывать встроенный элемент.


Если вам действительно нужно знать начальные / конечные смещения существующего InlineObjectElement:

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

Если вы не знаете начальное смещение родителя VisualLineнет никакого способа определить смещение. Но вы всегда должны знать это, учитывая, что вы сами создали элемент в генераторе (в этом случае это context.VisualLine) или нашел элемент в parentVisualLine.Elements коллекция.

Другие вопросы по тегам