2

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

编辑

我在 StackOverflow 上找到了一个很好的答案,描述了 Twitter 示例以及如何更详细地执行此操作:

使用 LongListSelector 进行连续分页

4

6 回答 6

6

你不。

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

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

要刷新页面的内容(或者在您的情况下是 a LongListSelector),您应该使用refresh ApplicationBacIconButton,就像在邮件应用程序中一样。这是管理刷新的标准和首选方式。

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

这不是动物园,有规则。

于 2012-12-13T03:32:49.240 回答
6

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

下载此项目:http ://code.msdn.microsoft.com/wpapps/TwitterSearch-Windows-b7fc4e5e

于 2012-12-14T19:48:57.710 回答
2

如果您真的必须这样做(请参阅 Miguel Rochefort 的回答),那么可以在http://blogs.msdn.com/b/jasongin/archive/2011/04/13/pull-down-to-refresh-a找到详细信息-wp7-listbox-or-scrollviewer.aspx

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

于 2012-12-13T20:18:56.103 回答
2

这并非完全无关紧要,但一种方法是使用 GestureService

        this.gestureListener = GestureService.GetGestureListener(containerPage);
        this.gestureListener.DragStarted += gestureListener_DragStarted;
        this.gestureListener.DragCompleted += gestureListener_DragCompleted;
        this.gestureListener.DragDelta += gestureListener_DragDelta;

但是,它有一些错误。例如, DragCompleted 并不总是被引发,因此您需要使用 ManipulationCompleted 事件仔细检查,这似乎更可靠。

        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;
    }

最后,您可以找到 list 是否一直位于顶部:

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;
    }
}
于 2013-11-29T22:53:15.047 回答
-1

您可以查看 https://github.com/Kinnara/WPToolkit中的示例, 它有一个出色的实现,称为 longllistselector 控件的 ListView 扩展,这将真正帮助您。

并记住 longlistselector 总是尝试加载至少 20 个项目。=)

于 2013-09-02T08:53:59.307 回答
-2

由于 WP8 LLS 不使用滚动查看器,我想您将不得不检查 UI 树以获取视口控件并查看您可以使用 ViewportControl.Viewport 属性做什么......

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

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

于 2013-04-16T11:20:01.390 回答