我正在使用代码选择 gridview 项目,所以我还需要我的 gridview 在所选项目的位置滚动,我尝试了 GridView.ScrollintoPosition() 但它不起作用。有什么办法可以得到 滚动位置 SelectedItem 的,以便我可以使用滚动它 scrollViewer1.ScrollToHorizo​​ntalOffsetWithAnimation()

有帮助吗?

解决方案

这里有几个方面。

  1. 我认为只是 gridView.ScrollIntoView(gridView.SelectedItem) 应该管用。它有点异步,因此代码不会立即看到它滚动,但如果您执行类似的操作 await Task.Delay(100) - 你可能会看到 ScrollViewer 偏移已更新..
  2. 如果您想要动画滚动 - 您可以使用 WinRT XAML Toolkit ScrollViewer.ScrollToHorizontalOffsetWithAnimation() 扩展或者如果您的目标是 Windows 8.1 - 您可以使用新的 ScrollViewer.ChangeView() 支持动画滚动的方法。
    1. 您需要获取的实例 ScrollViewer 在里面 GridView 首先是模板。你可以使用 GetTemplatePart() 或与 VisualTreeHelper.
    2. 现在您需要获取 UI 容器的位置 SelectedItem 在里面 ScrollViewer. 。为此,您首先需要容器本身,您可以使用它 var container = gv.ContainerFromItem(gv.SelectedItem), ,但如果 ItemsPanelGridView 是虚拟化的 - 你可能无法做到这一点,因为 SelectedItem 可能没有其 UI 容器。在这种情况下,我会简单地进行非动画滚动,原因有很多 - 主要是性能,但如果你真的必须这样做 - 你也许能够根据索引来计算位置 SelectedItem 在项目的集合和项目的大小,但它可能有点复杂。
    3. 获得容器后,您可以通过以下方式获取其位置 var horizontalOffset = gridViewItem.TransformToVisual(scrollViewer).TransformPoint(new Point()).X;
    4. 此时,您应该能够使用您喜欢的方法滚动到偏移量。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top