博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF 可触摸移动的ScrollViewer控件
阅读量:7209 次
发布时间:2019-06-29

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

原文:

ListBox支持触摸滑动,而ScrollViewer默认不支持。

ScrollViewer如需要添加上下/左右触摸移动,需要在Touch事件中处理。

处理如下:封装成一个用户控件

  1. TouchDown事件中记录起始点,并添加对TouchMove事件的监听
  2. TouchUp事件中注销TouchMove事件的监听
  3. 在TouchMove事件中,处理移动的偏移量。起始位置减去偏移量,即为当前滚动条的位置。

注:ScrollViewer滚动到指定位置(指定位置=起始位置-移动的偏移量,滚动方向和手势方向相反)

1     ///  2     /// 可触摸滚动的ScrollViewer控件 3     ///  4     public class TouchableScrollViewer : ScrollViewer 5     { 6         //触摸点的坐标 7         Point _startPosition; 8         //滚动条当前位置 9         double _startVerticalOffset;10         double _startHorizontalOffset;11         public TouchableScrollViewer()12         {13             TouchDown += TouchableScrollViewer_TouchDown;14 15             TouchUp += TouchableScrollViewer_TouchUp;16         }17         private void TouchableScrollViewer_TouchDown(object sender, TouchEventArgs e)18         {19             //添加触摸移动监听20             TouchMove -= TouchableScrollViewer_TouchMove;21             TouchMove += TouchableScrollViewer_TouchMove;22 23             //获取ScrollViewer滚动条当前位置24             _startVerticalOffset = VerticalOffset;25             _startHorizontalOffset = HorizontalOffset;26 27             //获取相对于ScrollViewer的触摸点位置28             TouchPoint point = e.GetTouchPoint(this);29             _startPosition = point.Position;30         }31 32         private void TouchableScrollViewer_TouchUp(object sender, TouchEventArgs e)33         {34             //注销触摸移动监听35             TouchMove -= TouchableScrollViewer_TouchMove;36         }37 38         private void TouchableScrollViewer_TouchMove(object sender, TouchEventArgs e)39         {40             //获取相对于ScrollViewer的触摸点位置41             TouchPoint endPoint = e.GetTouchPoint(this);42             //计算相对位置43             double diffOffsetY = endPoint.Position.Y - _startPosition.Y;44             double diffOffsetX = endPoint.Position.X - _startPosition.X;45 46             //ScrollViewer滚动到指定位置(指定位置=起始位置-移动的偏移量,滚动方向和手势方向相反)47             ScrollToVerticalOffset(_startVerticalOffset - diffOffsetY);48             ScrollToHorizontalOffset(_startHorizontalOffset - diffOffsetX);49         }50     }

 Demo

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

你可能感兴趣的文章
优化Angular应用的性能
查看>>
php字符串函数
查看>>
[IOS] 自颁发证书不合法问题
查看>>
MYSQL常用命令
查看>>
Java中使用Jedis操作Redis
查看>>
play2.0实现新浪OAuth2.0
查看>>
QT:使用“状态模式”绘制界面 参考的一种面向对象的绘制图片的方法
查看>>
for 循环 里面 save 的问题
查看>>
常用 arm 汇编指令
查看>>
如何用_R_语言的_Shiny_库编写_web_程序
查看>>
mysql初步入门
查看>>
你对C++语言的理解到了哪一步呢
查看>>
JEECMS中FreeMarker的Macro
查看>>
高性能JavaScript(您值得一看)
查看>>
工作记录
查看>>
MySQL修改默认字符集
查看>>
HTTP Keep-Alive是什么?如何工作?
查看>>
maven 异常解决
查看>>
实现林间的选择性身份验证
查看>>
进程的调度算法
查看>>