我正在使用Microsoft.Phone.Controls程序集中附带的现成的LongListSelector编写一个新的WP8应用程序。任何人都可以提供一个实现pull-to-refresh的代码示例,最初受到Tweetie for iPhone的欢迎,现在在iOS和Android上很常见吗?现有示例使用非标准控件,我想在WP8中继续使用LongListSelector。
修改
我在StackOverflow上找到了一个很好的答案,描述了Twitter示例以及如何更详细地执行此操作:
答案 0 :(得分:6)
你没有。
Pull-to-refresh不是标准的Windows Phone交互,因此您不应该实现它。
没有本机/第一方Windows Phone应用程序使用此功能,几乎没有第三方应用程序可以使用此功能。这是有原因的。
要刷新页面内容(或在您的情况下为LongListSelector
),您应该使用刷新 ApplicationBacIconButton
,就像在Mail应用中一样。这是管理刷新的标准和首选方式。
Windows Phone 不 Android,也不是iOS。在为其设计应用程序时请记住这一点。
它不是动物园,有规则。
答案 1 :(得分:6)
实际上,我刚刚发现一个项目于2012年11月30日上传到Windows Phone开发中心,该项目使用Twitter搜索和Windows Phone 8 LongListSelector实现“无限滚动”。
在http://code.msdn.microsoft.com/wpapps/TwitterSearch-Windows-b7fc4e5e
下载此项目答案 2 :(得分:2)
如果你真的必须这样做(见Miguel Rochefort的回答),可以在http://blogs.msdn.com/b/jasongin/archive/2011/04/13/pull-down-to-refresh-a-wp7-listbox-or-scrollviewer.aspx找到详细信息
基本上,ScrollViewer
具有隐藏/未记录状态,允许检测列表顶部或底部的“压缩”,您可以使用它来触发加载。
答案 3 :(得分: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;
}
最后,您可以找到列表是否一直位于顶部:
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;
}
}
答案 4 :(得分:-1)
您可以查看样品 https://github.com/Kinnara/WPToolkit 它有一个很好的实现,称为longllistselector控件的ListView扩展,它将真正帮助你。
并记住使用longlistselector总是尝试至少加载20个项目。 =)
答案 5 :(得分:-2)
由于WP8 LLS不使用滚动查看器,我猜你必须检查UI树以保持视口控件,看看你可以用ViewportControl.Viewport属性做什么......
哦...... twitter应用程序正在使用pull来刷新交互。我喜欢WP平台的UI指南,但是一旦掌握了规则就会被破坏;)
这篇文章here可以为您提供有关如何获取视口控件和检索滚动偏移的提示。当列表弹跳时,此滚动偏移量必须是特定值