AvalonEdit - Видимый текст - PullRequest
       8

AvalonEdit - Видимый текст

3 голосов
/ 22 октября 2010

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

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

Может ли кто-нибудь мне помочь?Thx

1 Ответ

4 голосов
/ 22 октября 2010

Вы можете использовать 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)

...