当启用父操作时,WPF TouchUp不会触发

问题描述:

我有一个Canvas,带有一个子控件。子控件接收所有的PreviewTouchDown和PreviewTouchUp事件,但在Canvas上启用操作(IsManipulationEnabled = true)后,只有“down”事件触发子对象,但TouchUp和PreviewTouchUp事件根本不会触发。当启用父操作时,WPF TouchUp不会触发

任何想法这里发生了什么?

您还需要在子元素上设置IsManipulationEnabledtrue


触摸和操纵事件之间的关系Input Overview/Touch and Manipulation解释,部分触摸和操作事件之间的关系:

一个的UIElement可以随时接收触摸事件。如果 IsManipulationEnabled属性设置为true,则UIElement可以接收到触摸和操纵事件 。如果TouchDown事件不是 处理的(即Handled属性为false),则逻辑操作将捕获对元素的触摸并生成操作 事件。如果在TouchDown事件中将Handled属性设置为true,则操作逻辑不会生成操纵事件。下图显示了 显示了触摸事件和 操纵事件之间的关系。

触摸和操纵事件

Touch and manipulation events

+0

因此,没有选项可以让它们同时出现? – Jaska 2013-03-17 18:57:13

+0

刚刚发现了我自己的一些代码,我从'PreviewTouchDown'处理程序手动调用'CaptureTouch',也设置了'Handled = true'。还有一个'PreviewTouchUp'处理程序。不幸的是我现在无法测试它,但我明天会试一试。 – Clemens 2013-03-17 19:53:15

+0

好的,如果你能做到的话,太好了......但是不要介意它是否太麻烦,因为我已经放弃了使用操纵的全部想法,并决定在touchmove -event中自己计算比例和旋转。 – Jaska 2013-03-17 19:56:49

我知道它的一岁,但是这可能帮助别人: 有关解决方法,你可以捕捉“笔轻击”事件就好了,如果父元素具有IsManipulationEnabled = true

.... 

MyChildElement.StylusSystemGesture += MyChildElement_StylusSystemGesture; 

.... 

void MyChildElement_StylusSystemGesture(object sender, StylusSystemGestureEventArgs e) 
    { 
     if (e.SystemGesture == SystemGesture.Tap) 
      //Do something 
    } 
+0

一年后,你救了我的理智!最后,我可以在启用了操纵的元素上检测到“点击”。一个封闭的按钮甚至不会检测到一个点击,但手写笔的手势工作。 – ulatekh 2016-02-17 23:06:39