Я загружаю довольно много форматированного текста в RichTextBox
(WPF) и хочу прокрутить до конца содержимого:
richTextBox.Document.Blocks.Add(...)
richTextBox.UpdateLayout();
richTextBox.ScrollToEnd();
Это не работает, ScrollToEnd
- этовыполняется, когда макет не закончен, поэтому он не прокручивается до конца, он прокручивается примерно до первой трети текста.
Есть ли способ заставить ожидание, пока не закончится RichTextBox
его операции рисования и разметки, так что ScrollToEnd
фактически прокручивается до конца текста?
Спасибо.
Материал, который не работает:
РЕДАКТИРОВАТЬ : Я пробовал событие LayoutUpdated
, но оно срабатывает немедленно, та же проблема: элемент управления все еще выкладывает больше текста внутри richtextbox, когда он запускается, поэтому даже ScrollToEnd
там неработа ... Я попробовал это:
richTextBox.Document.Blocks.Add(...)
richTextBoxLayoutChanged = true;
richTextBox.UpdateLayout();
richTextBox.ScrollToEnd();
и в обработчике события richTextBox.LayoutUpdated
:
if (richTextBoxLayoutChanged)
{
richTextBoxLayoutChanged = false;
richTextBox.ScrollToEnd();
}
Событие запускается правильно, но слишком рано, richtextbox все еще добавляет большетекст, когда он запущен, макет не закончен, поэтому ScrollToEnd
снова не удается.
РЕДАКТИРОВАТЬ 2 : Следуя ответу dowhilefor: MSDN в InvalidateArrange говорит:
После аннулирования у элемента будет обновлена его компоновка, что будет происходить асинхронно, если впоследствии не будет принудительно инициирован UpdateLayout.
Тем не менее, даже
richTextBox.InvalidateArrange();
richTextBox.InvalidateMeasure();
richTextBox.UpdateLayout();
НЕ ожидает: после этих вызовов richtextbox все еще добавляет текст и асинхронно размещает его внутри себя.ARG!