博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UWP的一种下拉刷新实现
阅读量:5887 次
发布时间:2019-06-19

本文共 1776 字,大约阅读时间需要 5 分钟。

原文:

简介

我们最近实现了一个在UWP中使用的下拉刷新功能,以满足用户的需求,因为这是下拉刷新是一种常见的操作方式,而UWP本身并不提供这一机制。

通过下拉刷新这一机制,可以让移动端的界面设计变得更加简单,更符合广大用户的使用习惯。

 

NEW github链接:

该组件的nuget链接:

 

并且,我们实现的这一下拉刷新功能,具有以下优点:

  • 支持自定义下拉头部,包括及时显示下拉进度,分辨率较高。
  • 用于ListView时,支持UI虚拟化和增量加载,不影响诸如ListView.Header等属性。

 

基本使用

使用效果如图:

只需要简单的:

这是默认的效果。用户只需要订阅 RefreshInvoked 事件即可。

该事件类型为:TypedEventHandler<DependencyObject, object>,第一个参数senderPullToRefreshBoxContent,第二个参数总是null

 

更多设置

我们的下拉刷新控件提供更多设置可供开发者自定义其表现。

  • double RefreshThreshold {get;set;} :设置触发刷新的阈值,即有效下拉距离。
  • DataTemplate TopIndicatorTemplate {get;set;} :自定义下拉头部模板。这是一个DataTemplate,其DataContext只是一个double值,表示相对于下拉阈值的百分比(可以超过100%)。而该模板本身会决定可用的下拉大小。

 同时,我们还提供了一个PullRefreshProgressControl控件,方便开发者进行简单的头部定制。

该控件提供两个VisualState:Normal和ReleaseToRefresh,表示下拉过程中的两种状态(未到达刷新阈值,和已到达阈值)。

通过定义PullRefreshProgressControl.Template可以使用它(同样也要设定一下PullToRefreshBox.TopIndicatorTemplate,并且对PullRefreshProgressControl.Progress属性进行绑定)。

 

接下来为大家展示一下简单的定制效果:

相关代码如下:

 

如果想要更加复杂的效果,则需要完全自定义PullToRefreshBox.TopIndicatorTemplate。

 

实现原理

采用外部嵌套ScrollViewer的方式实现。同时监控ScrollViewer的大小变化,以调整Content(即PullToRefreshBox.Content)的大小。

同时在下拉发生后,通过DirectManipulationCompleted事件,确定松开手指的时刻,并将下拉头部滚出ScrollViewer的可视区域。

在ScrollViewer.ViewChanged事件中计算下拉距离,以实现分辨率较高的进度绑定。

 

已知问题

  • 用于StackPanel,Canvas这类有无限大空间的控件 且不指定PullToRefreshBox的具体大小时,其大小会恒定不变,而不会随Content大小变化而变化。

 

该组件的nuget链接:

如果大家在使用中遇到了什么问题,希望能向我们反馈,以使得我们的实现变得更好。 

 

感谢  提出的意见!

转载地址:http://bzgix.baihongyu.com/

你可能感兴趣的文章
gitlab 完整部署实例
查看>>
GNS关于IPS&ASA&PIX&Junos的配置
查看>>
影响企业信息化成败的几点因素
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
struts中的xwork源码下载地址
查看>>
ABP理论学习之仓储
查看>>
我的友情链接
查看>>
CentOS图形界面和命令行切换
查看>>
HTML5通信机制与html5地理信息定位(gps)
查看>>
加快ALTER TABLE 操作速度
查看>>
PHP 程序员的技术成长规划
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
js replace,正则截取字符串内容
查看>>
作业2
查看>>
nginx的信号量
查看>>
云im php,网易云IM
查看>>
c语言打开alist文件,C语言 文件的打开与关闭详解及示例代码
查看>>
DEFERRED_SEGMENT_CREATION
查看>>
Ada boost学习
查看>>
开源 java CMS - FreeCMS2.3字典管理
查看>>