获取GridView / ListView中的第一个可见项

时间:2014-10-12 19:19:24

标签: windows-runtime winrt-xaml windows-8.1

我在页面中显示一组图片。我使用GridView来显示图片。但是,当用户调整屏幕大小以缩小屏幕时,我切换到ListView 现在的问题是同步两个列表的滚动位置。我的解决方案是, 1.获取第一个列表中的第一个可见项目 2.使用ScrollIntoView
将第二个列表滚动到该项目 但是我无法在GridView / ListView中看到任何给我第一个信息的属性。任何想法?
此外,还有其他任何方式。

1 个答案:

答案 0 :(得分:3)

这似乎与我第一次尝试这样做的方式有关。您可以使用ItemsPanelRoot的{​​{1}}属性并获取面板的GridView/ListView,然后使用Children相对于每个孩子的列表控件来查找第一个是可见的。

我能想到的一个问题是,当TransformToVisual().TransformPoint()滚动一个列表中第一个在视口中的项目时,在另一个列表中显示为最后一个视图。也许你可以从列表控件的模板中获取ScrollIntoView()(例如,使用ScrollViewer)并首先滚动到列表的开头?

完成所有操作的最简单方法可能是滚动到列表中的相同偏移量即将进入视图中。它可能不是很精确,但它可以工作。

你甚至可以将一个列表中元素的动画过渡转换为另一个列表中的元素。

*更新

我四处询问,似乎我忘记了VisualTreeHelperGridView中的默认面板 - ListViewItemsWrapGrid包含FirstVisibleIndex属性可以用来获取对象,然后在列表控件上调用ScrollIntoView(),然后调用ScrollIntoViewAlignment枚举,你可以用来表示你希望滚动到项目是第一个可见的(与前沿对齐)。

*更新2

对于ItemsStackPanel - 您还可以使用ListViewPersistenceHelper来获取和设置相对偏移。

即将推出的WinRT XAML Toolkit更新可能会有所帮助,因为它可以让您简单地调用:ListViewBase,反之亦然。

gridView.SynchronizeScrollOffset(listView);