本篇文章分享一下之前遇到的WPF应用在触摸屏下使用时的两个问题。
具体场景就是一个配置界面, ScrollViewer
中包含一个StackPanel
然后纵向堆叠,以滚动的方式查看,然后包含多个 TextBlock
、 TextBox
以及DataGrid
,期间遇到了两个问题:
ScrollViewer
)的情况下,默认包含触底反馈的功能,就是触摸屏滑动到底或从底滑到顶,界面都会出现抖动的情况。DataGrid
中时,无法滚动界面。大概像这样:
先来看第一个问题,这个其实是由于 ManipulationBoundaryFeedback
这个事件引起的:
最简单的做法,就是在对应包含ScrollViewer
的 UI 元素绑定它的反馈事件,然后在注册方法中设置 e.Handled = true;
,这样中断了事件继续冒泡或隧道传播,比如这样
但是这样就需要你在每一个界面都添加该事件,代码冗余,那么就可以使用附加属性的方式,写一个 ManipulationBoundaryFeedbackAttachedProperties
,各个界面直接使用,像这样实现:
像这样使用:
这样就可以解决了!
这个问题,其实不光在 DataGrid
中有,触点在 TextBox
、ListView
、ListBox
,这一类内置有 ScrollViewer
的控件内,都有同样的问题,而且不光是触摸屏无法滚动,鼠标滑轮也无法滚动。我处理这个问题的时候,是先处理的鼠标滑轮无法滚动,处理方案就是根据鼠标的偏移量,手动设置 ScrollViewer
的位置,如下:
这样就解决了当鼠标位于 DataGrid
中时,使用滑轮界面无法滚动的问题,那么解决触摸屏触点在 DataGrid
中无法滚动的问题,也是一样的思路,根据触点的偏移量,模拟鼠标滚轮的偏移量,在调用鼠标滚动事件,模拟滚动,代码如下:
这样,触摸屏下,触点在 DataGrid
中无法滚动的问题,就解决了。
总的来说,大部分鼠标和触摸屏事件是类似的,但是有些场景下,可能两者不通用的。所以可能需要自行测试一下,保证软件的稳定性。
本文中的解决方案不一定最完美的解决方案,如果各位看官有更好的解决方案,望不吝赐教。
本文分享自 Niuery Diary 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!