問題 §
UWPのプログラムからテキストボックスを末尾にスクロールダウンさせようとしたができない。
XAML
<ScrollViewer VerticalScrollBarVisibility="Visible"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="10,80,10,40" >
<TextBox x:Name="mainText" TextWrapping="Wrap" AcceptsReturn="True" IsReadOnly="True" ></TextBox>
</ScrollViewer>
C#
private void ScrollToBottom(TextBox textBox)
{
var parent = textBox.Parent as ScrollViewer;
if (parent == null) return;
parent.ChangeView(0.0f, parent.ExtentHeight, 1.0f, true);
}
原因 §
キャレット位置が先頭なのでスクロール位置が戻されてしまう。
解決 §
キャレット位置も末尾に設定する。
以下のようなコードをメソッドの先頭に入れる。
textBox.Select(textBox.Text.Length, 0);