AvalonEdit — видимый текст

Я пытаюсь получить видимый текст элемента управления avalonedit, но VisualLines[] обрабатывает только перенос слов с помощью TextLines[], и я не знаю, как проверить, находится ли TextLine в видимой области или нет.

Проблема также будет решена, если я смогу получить начальное и конечное смещение (или длину) видимого текста в текстовом представлении, но я не нашел такой функции или члена...

Может кто-нибудь помочь мне? Спасибо


person zee    schedule 21.10.2010    source источник


Ответы (1)


Вы можете использовать TextView.GetPosition для получения позиции документа для углов текстового представления:

TextViewPosition? start = textView.GetPosition(new Point(0, 0) + textView.ScrollOffset);
TextViewPosition? end = textView.GetPosition(new Point(textView.ActualWidth, textView.ActualHeight) + textView.ScrollOffset);

Вы можете использовать TextDocument.GetOffset для преобразования TextViewPosition в смещение. Обратите внимание, что вы можете вернуть null, когда в указанной точке нет строки - в пределах видимой области, что должно происходить только в том случае, если конец видимой области находится за концом документа, поэтому вы должны иметь возможность предположить конец документа в случаях:

int startOffset = start != null ? document.GetOffset(start.Value.Location) : document.TextLength;
int endOffset = end != null ? document.GetOffset(end.Value.Location) : document.TextLength;

Однако при желании вы также можете работать непосредственно с VisualLine/TextLines: VisualLine.VisualTop сообщает вам, где начинается визуальная линия (координата Y), а каждая TextLine внутри VisualLine имеет свойство Height. Используя их, вы можете определить, какие текстовые строки видны, затем использовать их метод GetCharacterHitFromDistance для получения визуального столбца и использовать VisualLine.GetRelativeOffset для вычисления смещения текста от визуального столбца. (это то, что делает метод TextView.GetPosition)

person Daniel    schedule 21.10.2010
comment
Потрясающе! Теперь моя проверка орфографии работает отлично. Большое спасибо! - person zee; 22.10.2010
comment
В качестве личной справки, вот ссылка на текущую справочную страницу для TextView.GetPosition в документации AvalonEdit: avalonedit.net/documentation/html/ - person wip; 25.11.2014