2009-08-04 4 views
1

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

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

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

ответ

0

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