LongListSelector中的滚动管理

4
在我的WP8应用程序中,我试图实现一项功能,使我能够保存的滚动位置并在以后的某个时间滚动到该位置(例如在 tombstoning 后)。尽管取得了一些进展,但这证明是一个相当困难的任务。 我现在认为,要使此功能工作,我需要以下内容:
1. 显然需要“滚动到指定项”的功能,我现在已经拥有它。(虽然是的扩展,但没有方法,尽管可以在的可视树中找到,这就是我所做的)。 1.1. 需要“带动画地滚动到指定项”的功能,这一点我还没有解决。虽然这不是非常重要,但拥有它会很好。在搜索了一些信息后,我发现< LongListSelector >曾经有过< AnimateTo >方法,但目前已经没有了。
2. 需要“查找当前屏幕上显示的项目”的功能,以便我可以保存其中一个可见项目的索引,然后滚动到它。这一点我也还没有解决,它非常重要。 在搜索了一些信息后,我发现这个问题:WP7 Toolkit Update Removed GetItemsInView() from the LongListSelector。它说在以前的版本中,有一个函数,后来它还有和事件专门用于此目的。但目前,没有这些选项。 因此,主要问题是我现在应该怎么找到中的可见项目?
2个回答

4

目前似乎没有直接且简单的方法来查找哪些项是可见的。不过,还未失去所有希望。在运行时,可以在LongListSelector的可视树中找到ScrollBarLongListSelector

LongListSelector需要用它的ScrollTo方法,而我需要ScrollBarValueChanged事件,从中可以获取ScrollBar.MaximumScrollBar.Value,它们分别是控件高度和当前偏移量。问题是这两个属性并不总是正确计算,可能是由于LongListSelector的虚拟化和它不会一次性显示所有项的原因。好消息是,负距离(Maximum-Value,从列表末尾的偏移量)始终是正确的,虽然相对的。

因此,如果您能手动计算您的LongListMultiSelector的实际高度,则可以使用该实际高度和负距离来进行滚动管理。在我的情况下,这很容易,因为所有项的高度都相同。


Anton,你有这方面的代码示例吗?Github Gist或其他什么东西?我对这种手动计算方法很感兴趣! - Depechie

0

关于“能够带动画滚动到指定项”的回答:

这篇文章会对你有所帮助。

主要思路:ScrollViewer的VerticalOffset属性被标记为只读。因此,你可以创建一个外壳类来帮助你实现垂直偏移的动画效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接