ListBox支持触摸滑动,而ScrollViewer默认不支持。需要设置PanningMode属性,如果不设置PanningMode,如何自定义触摸滑动?

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

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

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

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

     /// <summary>
/// 可触摸滚动的ScrollViewer控件
/// </summary>
public class TouchableScrollViewer : ScrollViewer
{
//触摸点的坐标
Point _startPosition;
//滚动条当前位置
double _startVerticalOffset;
double _startHorizontalOffset;
public TouchableScrollViewer()
{
TouchDown += TouchableScrollViewer_TouchDown; TouchUp += TouchableScrollViewer_TouchUp;
}
private void TouchableScrollViewer_TouchDown(object sender, TouchEventArgs e)
{
//添加触摸移动监听
TouchMove -= TouchableScrollViewer_TouchMove;
TouchMove += TouchableScrollViewer_TouchMove; //获取ScrollViewer滚动条当前位置
_startVerticalOffset = VerticalOffset;
_startHorizontalOffset = HorizontalOffset; //获取相对于ScrollViewer的触摸点位置
TouchPoint point = e.GetTouchPoint(this);
_startPosition = point.Position;
} private void TouchableScrollViewer_TouchUp(object sender, TouchEventArgs e)
{
//注销触摸移动监听
TouchMove -= TouchableScrollViewer_TouchMove;
} private void TouchableScrollViewer_TouchMove(object sender, TouchEventArgs e)
{
//获取相对于ScrollViewer的触摸点位置
TouchPoint endPoint = e.GetTouchPoint(this);
//计算相对位置
double diffOffsetY = endPoint.Position.Y - _startPosition.Y;
double diffOffsetX = endPoint.Position.X - _startPosition.X; //ScrollViewer滚动到指定位置(指定位置=起始位置-移动的偏移量,滚动方向和手势方向相反)
ScrollToVerticalOffset(_startVerticalOffset - diffOffsetY);
ScrollToHorizontalOffset(_startHorizontalOffset - diffOffsetX);
}
}

Demo下载

最新文章

  1. .NET中DateTime.Now.ToString的格式化字符串
  2. JS判断客户端是手机还是PC的2个代码(转)
  3. 在.NET使用JSON作为数据交换格式
  4. 一、HTML和CSS基础--HTML+CSS基础课程--第4部分
  5. js 数组去重 的5种方法
  6. HDU 1241 Oil Deposits (DFS/BFS)
  7. DB2存储过程实现查询表数据,生成动态SQL,并执行
  8. 在html页,使用ctrl,shift多选表格行
  9. js动画学习(五)
  10. php四舍五入函数(floor、ceil、round与intval)
  11. EF 直接修改数据,不再查询数据库
  12. 对Spring与SpringMVC的理解
  13. Kotlin——从无到有系列之高级篇(一):Lambda表达式
  14. ROS(indigo) 用于机器人控制的图形化编程工具--code_it robot_blockly
  15. Linux Shell 命令--tr
  16. MyBatis缓存策略
  17. ccf-路径解析201604-3
  18. Git Add,Git别名等
  19. JAVA自动补全代码
  20. oracle学习笔记一:用户管理(3)用户口令管理

热门文章

  1. C++实验一
  2. css与html基础收集
  3. SpringMVC的配置和使用
  4. Python练手例子(12)
  5. RAID部署
  6. hadoop源码分析(2):Map-Reduce的过程解析
  7. touchweb网站常见问题,手机网站注意问题
  8. Hadoop 排序
  9. [Swift]LeetCode6. Z字形变换 | ZigZag Conversion
  10. 如何解决http请求返回结果中文乱码