Как найти видимую область WPF RichTextBox?

Я работаю над приложением, в котором у меня есть набор текста в RichTextBox. Я прыгаю на различные позиции в тексте (например, переходя к произвольному абзацу), который, кажется, работает, отправляя курсор в эту позицию, но я не могу контролировать, где в видимой области заканчивается курсор.

Иногда курсор оказывается вверху RichTextBox, а иногда и внизу. Это было бы хорошо, если бы меня интересовала только строка, на которой стоит курсор, но меня интересует весь абзац. В идеале я бы хотел каждый раз ставить курсор в середине RichTextBox. Если только абзац не длиннее видимой области.

Мой вопрос. Есть ли способ определить видимую область RichTextBox и сделать расчет того, как правильно расположить курсор? Если бы у меня было это значение, я мог бы решить, ставить ли курсор посередине (и знать, где находится середина) или вверху. Спасибо за помощь.


person shoe    schedule 04.08.2009    source источник


Ответы (1)


Я решил эту проблему. RichTextBox имеет свойство VerticalOffset, которое при добавлении к положению текстового указателя дает фактическое смещение.

Используя смещение, вы можете использовать RichTextBox.ScrollToVerticalOffset для прокрутки поля на основе свойства RichTextBox.ActualHeight.

пример: предположим, что у меня есть TextPoint pointer1 в позиции, которую я хочу прокрутить до

Rect thisposition = pointer1.GetCharacterRect(LogicalDirection.Forward);

richTextBox1.Focus();
richTextBox1.CaretPosition = pointer1;


double totaloffset = thisposition.Top + richTextBox1.VerticalOffset;
richTextBox1.ScrollToVerticalOffset(totaloffset - richTextBox1.ActualHeight / 2);
person shoe    schedule 06.08.2009