2

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

4

1 回答 1

4

这里有几个方面。

  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 容器SelectedItemScrollViewer. 要做到这一点,您首先需要容器本身,您可以使用它var container = gv.ContainerFromItem(gv.SelectedItem),但如果ItemsPanelGridView虚拟化的 - 您可能无法做到这一点,因为它SelectedItem可能没有它的 UI 容器。在这种情况下,出于多种原因,我会简单地进行非动画滚动 - 主要是性能,但如果你真的必须 - 你也许可以根据SelectedItem项目集合中的索引和项目大小来计算位置,但是这可能有点复杂。
    3. 获得容器后,您可以通过类似的方式获得其位置var horizontalOffset = gridViewItem.TransformToVisual(scrollViewer).TransformPoint(new Point()).X;
    4. 此时您应该能够使用您喜欢的方法滚动到偏移量。
于 2014-06-04T17:00:05.690 回答