(WPF)にかなりの量のリッチ テキストを読み込んでRichTextBoxおり、コンテンツの最後までスクロールしたい:
richTextBox.Document.Blocks.Add(...)
richTextBox.UpdateLayout();
richTextBox.ScrollToEnd();
これは機能せずScrollToEnd、レイアウトが終了していないときに実行されるため、最後までスクロールせず、テキストの最初の 3 分の 1 程度までスクロールします。
実際にテキストの最後までスクロールするRichTextBoxように、ペイントとレイアウト操作が完了するまで強制的に待機させる方法はありますか?ScrollToEnd
ありがとう。
動作しないもの:
編集:LayoutUpdatedイベントを試してみましたが、すぐに発生します。同じ問題: コントロールは、起動時にリッチテキストボックス内にさらにテキストを配置しているため、ScrollToEnd機能しません... 私はこれを試しました:
richTextBox.Document.Blocks.Add(...)
richTextBoxLayoutChanged = true;
richTextBox.UpdateLayout();
richTextBox.ScrollToEnd();
そしてrichTextBox.LayoutUpdatedイベントハンドラー内:
if (richTextBoxLayoutChanged)
{
richTextBoxLayoutChanged = false;
richTextBox.ScrollToEnd();
}
イベントは正しく発生しますが、すぐにリッチテキストボックスが発生したときにまだテキストを追加しているため、レイアウトが完了していないため、ScrollToEnd再び失敗します。
EDIT 2:dowhileforの答えに続いて:InvalidateArrangeのMSDNは言う
無効化の後、要素のレイアウトが更新されます。これは、後で UpdateLayout によって強制されない限り、非同期に発生します。
それでも
richTextBox.InvalidateArrange();
richTextBox.InvalidateMeasure();
richTextBox.UpdateLayout();
待機しません: これらの呼び出しの後、richtextbox はさらにテキストを追加し、それを内部に非同期的に配置しています。ARG!