如何在Windows 8 Metro App中获取GridView.Selected项目的滚动位置
我正在使用代码选择gridview项目,所以我还需要我的gridview在选定项目的位置滚动,我尝试了GridView.ScrollintoPosition()但它无法正常工作。 有没有办法获得SelectedItem的Scroll位置 ,以便我可以使用scrollViewer1.ScrollToHorizontalOffsetWithAnimation()滚动它
这里有几个方面。
- 我认为只需
gridView.ScrollIntoView(gridView.SelectedItem)
可以了。 它有点异步,所以代码不会立即看到它滚动,但是如果你做了类似await Task.Delay(100)
东西 – 你可能会看到更新的ScrollViewer
偏移量。 - 如果你想要一个动画滚动 – 你可以使用WinRT XAML Toolkit的
ScrollViewer.ScrollToHorizontalOffsetWithAnimation()
扩展,或者如果你的目标是Windows 8.1 – 你可以使用支持动画滚动的新ScrollViewer.ChangeView()
方法。- 您需要首先在
GridView
模板中获取ScrollViewer
的实例。 您可以使用GetTemplatePart()
或VisualTreeHelper
。 - 现在,您需要在
ScrollViewer
中获取SelectedItem
的UI容器的位置。 要做到这一点,你首先需要容器本身,你可以使用var container = gv.ContainerFromItem(gv.SelectedItem)
,但如果GridView
var container = gv.ContainerFromItem(gv.SelectedItem)
被虚拟化 – 你可能无法做到这一点,因为SelectedItem
可能不会有它的UI容器。 在这种情况下我会简单地做非动画滚动有很多原因 – 主要是性能,但如果你真的需要 – 你可能能够根据项目集合和项目大小中SelectedItem
的索引来计算位置,但它可能有点复杂。 - 一旦你得到容器,你可以得到它的位置,如
var horizontalOffset = gridViewItem.TransformToVisual(scrollViewer).TransformPoint(new Point()).X;
- 此时,您应该可以使用您喜欢的方法滚动到偏移量。
- 您需要首先在