Вы можете использовать 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/объектов TextLine: VisualLine.VisualTop
говорит вам, где начинается визуальная линия (Y координат), и каждый TextLine в пределах VisualLine имеет свойство Height
. Используя их, вы можете определить, какие текстовые строки видны, а затем использовать их метод GetCharacterHitFromDistance
для извлечения визуального столбца и использовать VisualLine.GetRelativeOffset
для вычисления смещения текста из визуального столбца. (это то, что делает TextView.GetPosition
способ)
Aweseome! Теперь мой инструмент проверки орфографии работает отлично. Большое спасибо! – zee
В качестве личной ссылки здесь приведена ссылка на текущую ссылочную страницу для «TextView.GetPosition» в документации AvalonEdit: http://avalonedit.net/documentation/html/070c6779-a358-33f0-09f4-7a3b49d36ee7.htm – wil