如何在 Windows 8 Metro 应用程序中获取 GridView.Selected Item 的滚动位置
-
21-12-2019 - |
题
我正在使用代码选择 gridview 项目,所以我还需要我的 gridview 在所选项目的位置滚动,我尝试了 GridView.ScrollintoPosition() 但它不起作用。有什么办法可以得到 滚动位置 SelectedItem 的,以便我可以使用滚动它 scrollViewer1.ScrollToHorizontalOffsetWithAnimation()
解决方案
这里有几个方面。
- 我认为只是
gridView.ScrollIntoView(gridView.SelectedItem)
应该管用。它有点异步,因此代码不会立即看到它滚动,但如果您执行类似的操作await Task.Delay(100)
- 你可能会看到ScrollViewer
偏移已更新.. - 如果您想要动画滚动 - 您可以使用 WinRT XAML Toolkit
ScrollViewer.ScrollToHorizontalOffsetWithAnimation()
扩展或者如果您的目标是 Windows 8.1 - 您可以使用新的ScrollViewer.ChangeView()
支持动画滚动的方法。- 您需要获取的实例
ScrollViewer
在里面GridView
首先是模板。你可以使用GetTemplatePart()
或与VisualTreeHelper
. - 现在您需要获取 UI 容器的位置
SelectedItem
在里面ScrollViewer
. 。为此,您首先需要容器本身,您可以使用它var container = gv.ContainerFromItem(gv.SelectedItem)
, ,但如果ItemsPanel
的GridView
是虚拟化的 - 你可能无法做到这一点,因为SelectedItem
可能没有其 UI 容器。在这种情况下,我会简单地进行非动画滚动,原因有很多 - 主要是性能,但如果你真的必须这样做 - 你也许能够根据索引来计算位置SelectedItem
在项目的集合和项目的大小,但它可能有点复杂。 - 获得容器后,您可以通过以下方式获取其位置
var horizontalOffset = gridViewItem.TransformToVisual(scrollViewer).TransformPoint(new Point()).X;
- 此时,您应该能够使用您喜欢的方法滚动到偏移量。
- 您需要获取的实例
不隶属于 StackOverflow