Создание 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
коллекция.