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