WPF 可触摸移动的ScrollViewer控件
ListBox支持触摸滑动,而ScrollViewer默认不支持。
ScrollViewer如需要添加上下/左右触摸移动,需要在Touch事件中处理。
处理如下:封装成一个用户控件
- TouchDown事件中记录起始点,并添加对TouchMove事件的监听
- TouchUp事件中注销TouchMove事件的监听
- 在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控件相关推荐
- WPF 中动态创建和删除控件
WPF 中动态创建和删除控件 原文:WPF 中动态创建和删除控件 动态创建控件 1.容器控件.RegisterName("Name",要注册的控件) //注册控件 2.容器控件 ...
- WPF遍历当前容器中某种控件的方法
原文:WPF遍历当前容器中某种控件的方法 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/details/79 ...
- WPF:从WPF Diagram Designer Part 1学习控件模板、移动、改变大小和旋转
欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ] 由于上周主要做了项目组产品架构.给公司新员工培训以及其他会议等事情,在OpenExpressApp对建 ...
- Actipro WPF Studio语法编辑器和停靠控件
Actipro WPF Studio语法编辑器和停靠控件 对接 向选项卡式 MDI 选项卡添加了"全部浮动"菜单项,它将容器中的所有停靠窗口浮动在一起. 改进了目标坞站主机命中测试 ...
- WPF基础五:UI④ 条目控件ContextMenu
派生关系: Object->DispatcherObject->DependencyObject->Visual->UIElement->FrameworkElement ...
- WPF界面开发新纪元——Diagram/Gantt控件升级
40分钟教你入门DevExpress v20.1最新推出控件--甘特图,立即报名>> DevExpress WPF Subscription拥有120+个控件和库,将帮助您交付满足甚至超出 ...
- WPF 2020界面开发新纪元——Accordion控件、图表功能升级
DevExpress WPF Subscription拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序.通过DevExpress WPF能创建有着强大互动功能的XAML基础 ...
- 【WPF】一个简单的ColorPicker控件
在斯克迪亚看到一篇WPF动态改变主题颜色的文章,来了兴趣,于是自己搞了个简单的ColorPicker控件. 控件其实很简单,定义了5个依赖属性 FinalBrushProperty, APropert ...
- WPF编游戏系列 之四 用户控件
在上一篇<WPF编游戏系列 之三 物品清单>中,对物品清单进行了演示,其中反复用到了同一组控件(如下图),而且 颜昌钢也指出在3.2.2中使用的C#代码过多,其实我在写这些代码时也有同感, ...
最新文章
- ctags,cscope,nerdtree,tmux 笔记
- 白话Elasticsearch73_ES生产集群中的索引管理02
- 不建议在Docker中部署数据库
- nova 命令汇总三 ——网络相关命令
- 阿里云谦大佬:时间精力有限的情况下如何高效学习前端?
- MySQL innodb每行数据长度的限制
- Java小白进阶笔记(1)-重新认识Java
- IRCTC的完整形式是什么?
- 阿里云新设浙江猫精人工智能科技有限公司
- css2列布局,左边div宽度固定,右边div宽度自适应
- Paradigm 已对 NFT 艺术品铸造和收藏协议 ZORA 进行投资
- php编译安装swoole模块
- Project file is incomplete. Expected imports are missing 错误解决方案
- nessus8.9.0百度网盘_免费百度网盘SVIP共享20.1.19
- CSDN CODE 将于本月底彻底关闭,请尽快迁移到码云
- SWOT分析》思维导图,帮助你做好企业优势劣势分析图
- Stata-DEA:数据包络分析一文读懂
- PHP 微信支付 企业支付个人 企业转账个人 企业转零钱
- Unity摄像机画面制作全景图片|截图制作全景图
- 国产spfa瞎几把嗨
热门文章
- java如何驱动z4mplus打印二维码_斑马 Zebra 打印机驱动下载
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 3、vueJs基础知识03
- 《剑指offer》第一题(重载赋值运算符)
- 【BZOJ-1952】城市规划 [坑题] 仙人掌DP + 最大点权独立集(改)
- 前端工程师都会喜欢的5个JavaScript库
- 【Silverlight】Bing Maps学习系列(三):如何控制地图
- 32 - I. 从上到下打印二叉树
- mvvm怎么让光标制定属性的文本框_Word怎么快速制作斜线表头?10秒搞定,表格颜值直线上升...
- STL(五)——slist/list链表