我正在使用代码选择 gridview 项目,所以我还需要我的 gridview 在所选项目的位置滚动,我尝试了 GridView.ScrollintoPosition() 但它不起作用。有什么方法可以获取 SelectedItem 的滚动位置,以便我可以使用scrollViewer1.ScrollToHorizontalOffsetWithAnimation()滚动它
问问题
1904 次
1 回答
4
这里有几个方面。
- 我认为
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;
- 此时您应该能够使用您喜欢的方法滚动到偏移量。
- 您需要先获取模板
于 2014-06-04T17:00:05.690 回答