From 4ca4238dfe87a9bc137bbb81852df2e02bad3edb Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Wed, 25 Nov 2015 02:15:15 +0100 Subject: [PATCH] Delay changing TextBox caret pos til after measure. --- .../Presenters/TextPresenter.cs | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Perspex.Controls/Presenters/TextPresenter.cs b/src/Perspex.Controls/Presenters/TextPresenter.cs index 6aabc6836f..8c25fc5a4f 100644 --- a/src/Perspex.Controls/Presenters/TextPresenter.cs +++ b/src/Perspex.Controls/Presenters/TextPresenter.cs @@ -142,8 +142,24 @@ namespace Perspex.Controls.Presenters _caretTimer.Start(); InvalidateVisual(); - var rect = FormattedText.HitTestTextPosition(caretIndex); - this.BringIntoView(rect); + if (IsMeasureValid) + { + var rect = FormattedText.HitTestTextPosition(caretIndex); + this.BringIntoView(rect); + } + else + { + // The measure is currently invalid so there's no point trying to bring the + // current char into view until a measure has been carried out as the scroll + // viewer extents may not be up-to-date. + Dispatcher.UIThread.InvokeAsync( + () => + { + var rect = FormattedText.HitTestTextPosition(caretIndex); + this.BringIntoView(rect); + }, + DispatcherPriority.Normal); + } } }