LongListSelector中的滚动管理

时间:2013-01-31 12:25:13

标签: c# scroll windows-phone-8 windows-phone longlistselector

在我的WP8应用程序中,我正在尝试实现一种功能,允许我保存LongMultiListSelector的滚动位置并在以后将其滚动到该位置(例如在墓碑之后)。它被证明是一个很大的追求,尽管取得了一些进展,我仍然有疑问。

据我了解,现在我需要以下内容才能实现:

  1. 显然滚动到指定项目的能力我现在拥有。 (LongMultiListSelector,尽管是[{1}}的扩展,但没有LongListSelector方法,尽管ScrollTo可以在LongListSelector的可视化树中找到,我做了什么。)

    1.1。 能力滚动到带动画的指定项目,这个我尚未解决。它并不重要,但拥有它会很好。经过一些搜索后,我发现LongMultiListSelectorLongListSelector方法,但目前还没有。

  2. 能够找出屏幕上当前可见的AnimateTo项目,以便我可以保存其中一个可见项目的索引,然后滚动到该项目。这个我还没有解决,这是非常重要的。

    经过一番搜索,我发现了这个问题:WP7 Toolkit Update Removed GetItemsInView() from the LongListSelector。据说以前LongListSelector有一个LongListSelector函数,稍后它会有GetItemsInViewLink个事件,特别是为此目的。目前Unlink没有这些选项。

    所以主要问题是我现在应该怎样做才能找到LongListSelector中的可见项?

2 个答案:

答案 0 :(得分:4)

我看起来目前还没有简单直接的方法来查找哪些项目可见。幸运的是并非一切都丢失了。 ScrollBarLongListSelector都可以在运行时在LongListSelector的可视化树中找到。

它的LongListSelector方法需要

ScrollTo,而ScrollBar需要ValueChanged我需要ScrollBar.Maximum的{​​{1}}和ScrollBar.Value分别是控制高度和电流偏移。问题再次出现,这两个属性并不总是正确计算,可能是由于LongListSelector的虚拟化以及它没有同时显示所有项目。好消息是负距离(最大值 - 值,从列表末尾的偏移量)虽然是相对的,但总是正确的。

因此,如果您可以手动计算LongListMultiSelector的实际高度,则可以使用该实际高度和负距离进行滚动管理。就我而言,这很简单,因为所有物品的高度都相同。

答案 1 :(得分:0)

回答能够滚动到带动画的指定项目

This文章会对您有所帮助。

主要想法:ScrollViewer的VerticalOffset Property被标记为只读。因此,您可以创建一个shell类,它将帮助您为VerticalOffset设置动画。