原文:WPF 可触摸移动的ScrollViewer控件

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

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

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

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

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

 1     /// <summary>
 2     /// 可触摸滚动的ScrollViewer控件
 3     /// </summary>
 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下载

WPF 可触摸移动的ScrollViewer控件相关推荐

  1. WPF 中动态创建和删除控件

    WPF 中动态创建和删除控件 原文:WPF 中动态创建和删除控件 动态创建控件 1.容器控件.RegisterName("Name",要注册的控件)   //注册控件 2.容器控件 ...

  2. WPF遍历当前容器中某种控件的方法

    原文:WPF遍历当前容器中某种控件的方法 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/details/79 ...

  3. WPF:从WPF Diagram Designer Part 1学习控件模板、移动、改变大小和旋转

    欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ] 由于上周主要做了项目组产品架构.给公司新员工培训以及其他会议等事情,在OpenExpressApp对建 ...

  4. Actipro WPF Studio语法编辑器和停靠控件

    Actipro WPF Studio语法编辑器和停靠控件 对接 向选项卡式 MDI 选项卡添加了"全部浮动"菜单项,它将容器中的所有停靠窗口浮动在一起. 改进了目标坞站主机命中测试 ...

  5. WPF基础五:UI④ 条目控件ContextMenu

    派生关系: Object->DispatcherObject->DependencyObject->Visual->UIElement->FrameworkElement ...

  6. WPF界面开发新纪元——Diagram/Gantt控件升级

    40分钟教你入门DevExpress v20.1最新推出控件--甘特图,立即报名>> DevExpress WPF Subscription拥有120+个控件和库,将帮助您交付满足甚至超出 ...

  7. WPF 2020界面开发新纪元——Accordion控件、图表功能升级

    DevExpress WPF Subscription拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序.通过DevExpress WPF能创建有着强大互动功能的XAML基础 ...

  8. 【WPF】一个简单的ColorPicker控件

    在斯克迪亚看到一篇WPF动态改变主题颜色的文章,来了兴趣,于是自己搞了个简单的ColorPicker控件. 控件其实很简单,定义了5个依赖属性 FinalBrushProperty, APropert ...

  9. WPF编游戏系列 之四 用户控件

    在上一篇<WPF编游戏系列 之三 物品清单>中,对物品清单进行了演示,其中反复用到了同一组控件(如下图),而且 颜昌钢也指出在3.2.2中使用的C#代码过多,其实我在写这些代码时也有同感, ...

最新文章

  1. ctags,cscope,nerdtree,tmux 笔记
  2. 白话Elasticsearch73_ES生产集群中的索引管理02
  3. 不建议在Docker中部署数据库
  4. nova 命令汇总三 ——网络相关命令
  5. 阿里云谦大佬:时间精力有限的情况下如何高效学习前端?
  6. MySQL innodb每行数据长度的限制
  7. Java小白进阶笔记(1)-重新认识Java
  8. IRCTC的完整形式是什么?
  9. 阿里云新设浙江猫精人工智能科技有限公司
  10. css2列布局,左边div宽度固定,右边div宽度自适应
  11. Paradigm 已对 NFT 艺术品铸造和收藏协议 ZORA 进行投资
  12. php编译安装swoole模块
  13. Project file is incomplete. Expected imports are missing 错误解决方案
  14. nessus8.9.0百度网盘_免费百度网盘SVIP共享20.1.19
  15. CSDN CODE 将于本月底彻底关闭,请尽快迁移到码云
  16. SWOT分析》思维导图,帮助你做好企业优势劣势分析图
  17. Stata-DEA:数据包络分析一文读懂
  18. PHP 微信支付 企业支付个人 企业转账个人 企业转零钱
  19. Unity摄像机画面制作全景图片|截图制作全景图
  20. 国产spfa瞎几把嗨

热门文章

  1. java如何驱动z4mplus打印二维码_斑马 Zebra 打印机驱动下载
  2. 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
  3. 3、vueJs基础知识03
  4. 《剑指offer》第一题(重载赋值运算符)
  5. 【BZOJ-1952】城市规划 [坑题] 仙人掌DP + 最大点权独立集(改)
  6. 前端工程师都会喜欢的5个JavaScript库
  7. 【Silverlight】Bing Maps学习系列(三):如何控制地图
  8. 32 - I. 从上到下打印二叉树
  9. mvvm怎么让光标制定属性的文本框_Word怎么快速制作斜线表头?10秒搞定,表格颜值直线上升...
  10. STL(五)——slist/list链表