C# LongListSelector中的滚动管理

C# LongListSelector中的滚动管理,c#,scroll,windows-phone-8,windows-phone,longlistselector,C#,Scroll,Windows Phone 8,Windows Phone,Longlistselector,在我的WP8应用程序中,我试图实现一种功能,允许我保存LongMultiListSelector的滚动位置,并在以后将其滚动到该位置(例如,在墓碑整理之后)。事实证明,这是一项相当艰巨的任务,尽管取得了一些进展,但我仍然有疑问 据我现在所知,我需要以下几点才能使其正常工作: 显然,可以滚动到我现在拥有的指定项目。(LongMultiListSelector,尽管是LongListSelector的扩展,但没有ScrollTo方法,尽管LongListSelector可以在LongMultiLis

在我的WP8应用程序中,我试图实现一种功能,允许我保存
LongMultiListSelector
的滚动位置,并在以后将其滚动到该位置(例如,在墓碑整理之后)。事实证明,这是一项相当艰巨的任务,尽管取得了一些进展,但我仍然有疑问

据我现在所知,我需要以下几点才能使其正常工作:

  • 显然,可以滚动到我现在拥有的指定项目。(
    LongMultiListSelector
    ,尽管是
    LongListSelector
    的扩展,但没有
    ScrollTo
    方法,尽管
    LongListSelector
    可以在
    LongMultiListSelector
    的可视化树中找到,这就是我所做的)

    1.1能够通过动画滚动到指定的项目,而这个问题我还没有解决。这并不重要,但拥有它会很好。经过一些搜索,我发现曾经
    LongListSelector
    AnimateTo
    方法,但目前没有

  • 能够找出
    LongListSelector
    的哪些项目当前在屏幕上可见
    ,因此我可以保存这些可见项目之一的索引,然后滚动到它。这个问题我还没有解决,它非常重要

    经过一番搜索,我发现了这个问题:。Is说,以前的
    LongListSelector
    有一个
    GetItemsInView
    函数,后来它有
    Link
    Unlink
    事件,特别是为了这个目的。当前
    LongListSelector
    没有这两个选项

    因此,主要的问题是我现在应该怎么做才能在
    LongListSelector
    中找到可见项


  • 我觉得目前根本没有简单直接的方法来找出哪些项目是可见的。幸运的是,并不是所有的东西都丢了。运行时,可以在
    LongListSelector
    的可视化树中找到
    ScrollBar
    LongListSelector

    LongListSelector
    用于
    ScrollTo
    方法,从
    ScrollBar
    我需要一个
    ValueChanged
    事件,在那里我可以获得
    ScrollBar.Maximum
    ScrollBar.Value
    ,它们分别是控制高度和当前偏移量。同样的问题是,这两个属性的计算并不总是正确的,这可能是由于
    LongListSelector
    的虚拟化以及它不能同时显示所有项目的事实。好的是负距离(最大值,从列表末尾的偏移量)虽然是相对的,但总是正确的


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

    回答能够通过动画滚动到指定的项目:

    这篇文章对你有帮助


    主要思想:ScrollViewer的
    垂直偏移属性
    被标记为只读。因此,您可以创建一个shell类来帮助您设置VerticalOffset的动画。

    Anton您有任何在线代码示例吗?一个github或什么的?我对这种手工计算方法感兴趣!