スクロールビューア内の特定の位置にスクロールするにはどうすればよいですか?
<ScrollViewer x:Name ="MyScrollView" HorizontalScrollBarVisibility="Hidden" Height="500">
<StackPanel x:Name="ContentsPanel">
<TextBlock x:Name="someTb" Height="50">
</TextBlock>
<TextBlock x:Name="otherTb" Height="100">
</TextBlock>
</StackPanel>
</ScrollViewer>
Scrollviewerで特定の要素にスクロールしようとしていますが、UWPを初めて使用するため、その方法を正しく理解できません。
イベントが発生したときの2番目のテキストブロックでMyScrollViewのスクロール位置を設定したいと思います。
より良い解決策は、ChangeView
/ScrollToVerticalOffset
の代わりにScrollToHorizontalOffset
を使用することです。後者は、Windows10では廃止されているためです。
MyScrollView.ChangeView(null, abosulatePosition.Y, null, true);
最後のパラメータをfalse
に設定することで、アニメーションをスクロールすることもできますenable。
完成させるために、このための拡張メソッドを作成しました。
public static void ScrollToElement(this ScrollViewer scrollViewer, UIElement element,
bool isVerticalScrolling = true, bool smoothScrolling = true, float? zoomFactor = null)
{
var transform = element.TransformToVisual((UIElement)scrollViewer.Content);
var position = transform.TransformPoint(new Point(0, 0));
if (isVerticalScrolling)
{
scrollViewer.ChangeView(null, position.Y, zoomFactor, !smoothScrolling);
}
else
{
scrollViewer.ChangeView(position.X, null, zoomFactor, !smoothScrolling);
}
}
したがって、この場合は、電話する必要があります
this.MyScrollView.ScrollToElement(otherTb);
私は答えを見つけました
var transform = otherTb.TransformToVisual(ContentsPanel);
Point absolutePosition = transform.TransformPoint(new Point(0,0));
MyScrollView.ScrollToVerticalOffset(absolutePosition.Y);
更新
UWPではScrollToVerticalOffsetは廃止されたため、
MyScrollView.ChangeView(null,absolutePosition.Y,null,true)
代わりに使用する必要があります。 https://msdn.Microsoft.com/en-us/library/windows/apps/dn252763.aspx