Как найти видимую область WPF RichTextBox? - PullRequest
1 голос
/ 04 августа 2009

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

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

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

1 Ответ

0 голосов
/ 06 августа 2009

Я решил эту проблему. 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);
...