lha*_*han 5 silverlight scrollviewer windows-phone windows-phone-8
我希望这不是重复,但我找不到任何关于如何实际使用的 文档或示例ScrollToVerticalOffset().我在Windows Phone 8应用程序中使用它,但我认为它仍然适用于WP7和Silverlight(尽管如果我错了,请随时纠正我).
所以这是我的基本设置(来自内存的伪代码):
<phone.PivotItem>
<ScrollViewer>
<Grid Height="1500">
<Grid.RowDefinitions>
<!-- about 20 rows, all auto-height -->
</Grid.RowDefinitions>
<Border Grid.Row="0">
<TextBox x:Name="txt1" />
</Border>
<Border Grid.Row="1">
<TextBox x:Name="txt2" />
</Border>
<!-- ...... -->
<Border Grid.Row="19">
<TextBox x:Name="txt20" />
</Border>
</Grid>
</ScrollViewer>
</phone.PivotItem>
Run Code Online (Sandbox Code Playgroud)
所以你可以看到,我有一个ScrollViewer内部PivotItem,内部是一个Grid.在Grid大约20 TextBox秒,每个在一个Border.TextBox当这个页面加载时,我动态地将焦点设置为其中一个,所以任何时候我将焦点设置为TextBox#6-20(粗略) - 我必须手动向下滚动才能看到它.我想自动滚动我,ScrollViewer以便无论哪个TextBox有焦点,它都会居中以供用户查看.
该文档的ScrollToVerticalOffset()说:
将ScrollViewer中的内容滚动到指定的垂直偏移位置.
并且它接受一种类型System.Double.
我不明白的是A)我应该通过的价值,以及B)我怎么能得到那个价值?它应该是介于0和我的高度Grid(1500)之间的数字吗?如果是这样,我怎么能确定任何给定的位置,TextBox以便我可以滚动到它?
如果有任何简单的例子,请随时链接到他们.ScrollViewer在调用此方法时,我不确定问题中的内容是否存在,但如果确实如此,我想要准确显示我是如何使用它的.
提前谢谢了!
Gar*_*son 11
您可以使用UIElement.TransformToVisual调用查看任何UIElement相对于另一个UIElement的位置.
首先,获取TextBox和ScrollViewer之间的转换.
GeneralTransform transform = textBox.TransformToVisual(scrollViewer);
Run Code Online (Sandbox Code Playgroud)
然后,找出TextBox相对于ScrollViewer的哪个点(0,0).意思是,TextBox原点(0,0)位于ScrollViewer的位置.
Point textBoxPosition = transform.Transform(new Point(0, 0));
Run Code Online (Sandbox Code Playgroud)
现在您已知道TextBox相对于ScrollViewer的Y位置,滚动到该Y偏移.
scrollViewer.ScrollToVerticalOffset(textBoxPosition.Y);
Run Code Online (Sandbox Code Playgroud)
祝好运!
| 归档时间: |
|
| 查看次数: |
7767 次 |
| 最近记录: |