设为首页 收藏本站
查看: 1493|回复: 0

在win8中如何实现下拉刷新的功能

[复制链接]

尚未签到

发表于 2015-5-21 11:06:38 | 显示全部楼层 |阅读模式
  现在我以listview为例来讲述下拉刷新的功能!
  在xaml中设置listview一定要设置一个这样的属性,IsSwipeEnabled=false,然后再listview控件的前面要布局下拉刷新的图标及提示,在listview控件的后面也要布局上拉时的提示信息。
  现在我将个人的布局展现出来,仅供大家参考!











































  
  
  然后在后台就要实现下拉刷新的正真效果呢!
  这里特别要指出的要注册这样一个事件,  this.LayoutUpdated += ForumList_LayoutUpdated;不然就实现不了!
  也要注册listview的触摸事件,例如:
  this.ForumList.ManipulationStarted+=ForumList_ManipulationStarted;
            this.ForumList.ManipulationDelta+=ForumList_ManipulationDelta;
            this.ForumList.ManipulationCompleted+=ForumList_ManipulationCompleted;
  
  思路就是这样的,现在我就讲后台的逻辑也给大家参考!



  DispatcherTimer toptimer = new DispatcherTimer();
DispatcherTimer timer = new DispatcherTimer();
private ScrollViewer listViewScrollViewer;
private double listviewItemHeight = -1;
private int optLimitHeight = 96;
private bool isInPrpcessing = false;
private Point eventStartPoint;
private double lastDeltaHandledY = 0;
private ObservableCollection listDataItems = new ObservableCollection();
//移动开始位置
private Point moveStartPoint;
//是否可以移动
private bool canMove = false;
public ListPage()
{
this.InitializeComponent();
this.imgArrow.Source = new BitmapImage(new Uri(@"ms-appx:///Assets/pullrefresh_arrow.png",UriKind.RelativeOrAbsolute));
this.LayoutUpdated += ForumList_LayoutUpdated;
this.recRefresh.SizeChanged+=recRefresh_SizeChanged;
this.ForumList.ManipulationStarted+=ForumList_ManipulationStarted;
this.ForumList.ManipulationDelta+=ForumList_ManipulationDelta;
this.ForumList.ManipulationCompleted+=ForumList_ManipulationCompleted;
//this.ForumList.SelectionChanged+=ForumList_SelectionChanged;
}
  




  private void ForumList_LayoutUpdated(object sender, object e)
{
if (this.Height.Equals(double.NaN) && this.Parent != null)
{
this.Height = ((Windows.UI.Xaml.FrameworkElement)(this.Parent)).ActualHeight;
}
if (listViewScrollViewer == null)
{
listViewScrollViewer = FindVisualElement(VisualTreeHelper.GetParent(this));
listViewScrollViewer.ManipulationMode = ManipulationModes.All;
}
for (int i = 0; i < this.ForumList.Items.Count; i++)
{
ListViewItem item = this.ForumList.ItemContainerGenerator.ContainerFromIndex(i) as ListViewItem;
if (item != null && item.ManipulationMode != ManipulationModes.All)
{
item.ManipulationMode = ManipulationModes.All;
if (listviewItemHeight < 0)
{
listviewItemHeight = ((Windows.UI.Xaml.FrameworkElement)(item)).ActualHeight;
}
}
}
}
private static T FindVisualElement(DependencyObject container) where T : DependencyObject
{
Queue childQueue = new Queue();
childQueue.Enqueue(container);
while (childQueue.Count > 0)
{
DependencyObject current = childQueue.Dequeue();
T result = current as T;
if (result != null && result != container)
{
return result;
}
int childCount = VisualTreeHelper.GetChildrenCount(current);
for (int childIndex = 0; childIndex < childCount; childIndex++)
{
childQueue.Enqueue(VisualTreeHelper.GetChild(current, childIndex));
}
}
return null;
}
  



private void recRefresh_SizeChanged( object sender,SizeChangedEventArgs e)
{
if (e.NewSize.Height > this.optLimitHeight && !isInPrpcessing)
{
if (!this.txtOperationTip.Text.Equals("松开刷新…"))
{
this.txtOperationTip.Text = "松开刷新…";
this.ImgStoryBoard.Begin();
}
}
}
private void ForumList_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
eventStartPoint = e.Position;
lastDeltaHandledY = 0;
if (!isInPrpcessing)
{
this.txtOperationTip.Text = "下拉刷新列表…";
}
e.Handled = true;
}
private void ForumList_ManipulationDelta(object sender,ManipulationDeltaRoutedEventArgs e)
{
double offset = e.Cumulative.Translation.Y - lastDeltaHandledY;
if (listViewScrollViewer.VerticalOffset < 3)
{
double height = recRefresh.Height + offset;
recRefresh.Height = height > 0 ? height : 0;
if (offset < 0 && recRefresh.Height = listViewScrollViewer.ScrollableHeight - 1)
{
double height = recLoad.Height - offset;
recLoad.Height = height > 0 ? height : 0;
if (offset > 0 && recLoad.Height  0)
{
if (recRefresh.Height > optLimitHeight && this.Refreshable)
{
recRefresh.Height = 96;
imgArrow.Visibility = Visibility.Collapsed;
prgRefresh.Visibility = Visibility.Visible;
if (!this.isInPrpcessing)
{
System.Diagnostics.Debug.WriteLine(this.isInPrpcessing);
DoListDataSourceRefresh();
}
}
else
{
recRefresh.Height = 0;
}
listViewScrollViewer.ScrollToVerticalOffset(2.05);
}
if (recLoad.Height > 0)
{
if (recLoad.Height > optLimitHeight)
{
recLoad.Height = 68;
splNextPageLoading.Visibility = Visibility.Visible;
if (!this.isInPrpcessing)
{
DoListDataLoadNextPage();
}
}
else
{
recLoad.Height = 0;
}
}
}
private  void DoListDataSourceRefresh()
{
this.isInPrpcessing = true;
this.txtOperationTip.Text = "加载数据中";
this.isInPrpcessing = false;
this.recRefresh.Height = 0;
this.imgArrow.Visibility = Windows.UI.Xaml.Visibility.Visible;
this.prgRefresh.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
this.ImgStoryBoard.Begin(); //箭头复位
}
private  void DoListDataLoadNextPage()
{
this.recLoad.Height = 0;
splNextPageLoading.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
}
public event SelectionChangedEventHandler SelectionChanged;
private void ForumList_SelectionChanged( object sender,SelectionChangedEventArgs e)
{
SelectionChanged(sender,e);
}

  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-69165-1-1.html 上篇帖子: 解决win8 下 eclipse 中文字体太小的问题 下篇帖子: win8专业版和win8.1专业版安装密钥key及其永久激活工具
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表