Windows phone 8 如何在WindowsPhone8中使用LongListSelector实现拉式刷新?

Windows phone 8 如何在WindowsPhone8中使用LongListSelector实现拉式刷新?,windows-phone-8,longlistselector,Windows Phone 8,Longlistselector,我正在使用Microsoft.Phone.Controls程序集中提供的现成LongListSelector编写一个新的WP8应用程序。有谁能提供一个实现pull-to-refresh的代码示例吗?pull-to-refresh最初由Tweetie在iPhone上流行,现在在iOS和Android上很常见?现有的示例使用非标准控件,我希望在WP8中保持对LongListSelector的使用 编辑 我在StackOverflow上找到了一个很好的答案,描述了Twitter示例以及如何更详细地实现

我正在使用Microsoft.Phone.Controls程序集中提供的现成LongListSelector编写一个新的WP8应用程序。有谁能提供一个实现pull-to-refresh的代码示例吗?pull-to-refresh最初由Tweetie在iPhone上流行,现在在iOS和Android上很常见?现有的示例使用非标准控件,我希望在WP8中保持对LongListSelector的使用

编辑

我在StackOverflow上找到了一个很好的答案,描述了Twitter示例以及如何更详细地实现这一点:

你没有

拉入刷新不是标准的Windows Phone交互,因此您不应该实现它

没有本地/第一方Windows Phone应用程序使用此功能,几乎没有第三方应用程序使用此功能。这是有原因的

要刷新页面内容(或者在您的情况下,使用
长列表选择器
),您应该使用刷新
应用程序图标按钮
,就像在邮件应用程序中一样。这是管理刷新的标准和首选方法

Windows Phone不是Android,也不是iOS。在为其设计应用程序时,请记住这一点


这不是动物园,有规则。

如果你真的必须这样做(见米格尔·罗什福的答案),那么详情可以在


基本上,
ScrollViewer
具有隐藏/未记录状态,允许检测列表顶部或底部的“压缩”,您可以使用它触发加载

事实上,我刚刚在2012年11月30日发现了一个上传到Windows Phone开发中心的项目,该项目使用Twitter搜索和Windows Phone 8 LongListSelector实现了“无限滚动”


在以下位置下载此项目:

由于WP8 LLS不使用scrollviewer,我想您必须检查UI树以获得视口控件,并查看如何使用ViewportControl。viewport属性

哦。。。twitter应用程序现在正在使用pull刷新交互。我喜欢WP平台的UI指南,但规则一旦掌握,就会被打破;)


这篇文章可以提示您如何获取视口控件和检索滚动偏移。当列表反弹时,此滚动偏移量必须为特定值

您可以在中检出样本 它有一个很好的实现,称为longllistselector控件的ListView扩展,这将真正帮助您


请记住,使用longlistselector时,始终尝试至少加载20项。=)

这并不是很简单,但一种方法是使用GestureService

        this.gestureListener = GestureService.GetGestureListener(containerPage);
        this.gestureListener.DragStarted += gestureListener_DragStarted;
        this.gestureListener.DragCompleted += gestureListener_DragCompleted;
        this.gestureListener.DragDelta += gestureListener_DragDelta;
但是,它有一些bug。例如,DragCompleted并不总是引发的,所以您需要使用OperationCompleted事件对其进行双重检查,这似乎更可靠

        containerPage.ManipulationStarted += delegate { this.manipulationInProgress = true; };
        containerPage.ManipulationCompleted += delegate
        { 
            this.manipulationInProgress = false;
            PerformDragComplete(); 
        };
另一个问题是DragDelta偶尔会报告错误的坐标。因此,您需要这样的修复:

    Point refPosition = e.GetPosition(null);
    if (refPosition.X == 0 && refPosition.Y == 0)
    {
        Tracer.WriteLine("Skipping buggy event");
        return;
    }
最后,您可以找到列表是否一直位于顶部:

public double VerticalOffset
{
    get
    {
        ViewportControl viewportControl = this.FindChildByName("ViewportControl") as ViewportControl;
        if (viewportControl != null)
        {
            Tracer.WriteLine("ViewPort.Bounds.Top=" + viewportControl.Bounds.Top +  " ViewPort.Top=" + viewportControl.Viewport.Top.ToString() + " State=" + this.ManipulationState);
            return viewportControl.Bounds.Top - viewportControl.Viewport.Top;
        }
        return double.NaN;
    }
}

好的,谢谢你的信息。FWIW,这种行为最初不是iOS或Android所固有的,它是一种被发现并成为标准的有用手势。由于WP8实现了动态滚动,因此它们似乎可以进行模拟。如果我的用户抱怨,只是为了确认,我应该告诉他们这是a)不标准还是b)既不标准也不可能?告诉twitter和facebook windows phone应用程序开发者你知道facebook windows phone应用程序开发者是谁吗:Microsoft。这不是动物园,但ScrollViewer具有下拉效果。。。太奇怪了。。。此外,很有趣的是,看到微软的Facebook应用程序使用下拉刷新…我确实注意到了这段代码,但不幸的是,它的底部写着“对不起,它不能与LongListSelector一起工作——该控件可以自定义滚动,而不使用滚动查看器。”因此,我认为我不能使用它。可能是