private void _scrollViewer_DirectManipulationCompleted(object sender, object e) { _timer.Stop(); if (ListViewRequestDataContext.IsPullDownRefreshStatus && this.IsShowPullDownRefresh && null != PullDownRefresh) { PullDownRefresh.Invoke(this, null); //执行刷新操作 } ListViewRequestDataContext.IsPullDownRefreshStatus = false; //Debug.WriteLine("_scrollViewer_DirectManipulationCompleted"); }
private void _scrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e) { //在 pc 上 //TODO:在能够区分 desktop and phone 的时候添加对pc端下拉刷新的支持 if (null != PullDownRefresh && !_isHasDirectManipulationStarted && !ListViewRequestDataContext.IsPullDownRefreshStatus && !ListViewRequestDataContext.IsPullUpLoadMoreStatus) { var timeNow = DateTime.Now; //Debug.WriteLine("start:" + " Height=" + ScrollViewer.Height + " ActualHeight=" + ScrollViewer.ActualHeight + " ScrollableHeight=" + ScrollViewer.ScrollableHeight + " ExtentHeight=" + ScrollViewer.ExtentHeight + " VerticalOffset=" + ScrollViewer.VerticalOffset); if ((timeNow - _pullScrllTime).TotalSeconds < 0.3) //连续操作中 { //如果已经触发 且时间小于1.5秒内 则不操作 if (ListViewRequestDataContext.IsPullDownRefreshStatus && ((timeNow - _startedTime).TotalSeconds < 1.5)) { return; } if (_startedOffset == -1) //第一次 update { _startedOffset = (int)ScrollViewer.VerticalOffset; //Debug.WriteLine("_scrollViewer_ViewChanged 第一次 update " + " ScrollViewer.VerticalOffset=" + ScrollViewer.VerticalOffset); } else if (ScrollViewer.VerticalOffset < 0.5 && _startedOffset != 0) //满足置顶 条件 执行刷新 //这里发现手动滑动 有时候Voffset未必刚好为0 所以暂时做0.5的容错 { //Debug.WriteLine("_scrollViewer_ViewChanged 满足置顶 条件 执行刷新update " + " ScrollViewer.VerticalOffset=" + ScrollViewer.VerticalOffset); _startedOffset = -1; _startedTime = timeNow; ListViewRequestDataContext.IsPullDownRefreshStatus = true; PullDownRefresh.Invoke(this, null); } } else //非连续操作 重置数据 { //Debug.WriteLine("_scrollViewer_ViewChanged 非连续操作 重置数据 " + " ScrollViewer.VerticalOffset=" + ScrollViewer.VerticalOffset); _startedOffset = -1; _startedTime = timeNow; } _pullScrllTime = timeNow; } // Debug.WriteLine("end:" + " Height=" + ScrollViewer.Height + " ActualHeight=" + ScrollViewer.ActualHeight + " ScrollableHeight=" + ScrollViewer.ScrollableHeight + " ExtentHeight=" + ScrollViewer.ExtentHeight + " VerticalOffset=" + ScrollViewer.VerticalOffset); }