我有一个Canvas,上面有一个子控件。子控件可以正常接收所有的PreviewTouchDown和PreviewTouchUp事件 - 但是在启用Canvas的Manipulation (IsManipulationEnabled
= true)后,只有“down”事件能够触发子对象,而TouchUp和PreviewTouchUp事件则根本不会触发。
这里有什么问题吗?
IsManipulationEnabled
为true
。关于触摸和操作事件之间的关系,请参阅输入概述/触摸和操作,第触摸和操作事件之间的关系部分:
UIElement始终可以接收触摸事件。当设置
IsManipulationEnabled
属性为true时,UIElement可以接收触摸和操作事件。如果未处理TouchDown事件(即Handled属性为false),操作逻辑会将触摸捕获到元素并生成操作事件。如果在TouchDown事件中将Handled属性设置为true,则操作逻辑不会生成操作事件。下图显示了触摸事件和操作事件之间的关系。
触摸和操作事件
对于一个解决方法,如果父元素设置了IsManipulationEnabled = true
,你就可以很好地捕获"Stylus tap"
事件:
....
MyChildElement.StylusSystemGesture += MyChildElement_StylusSystemGesture;
....
void MyChildElement_StylusSystemGesture(object sender, StylusSystemGestureEventArgs e)
{
if (e.SystemGesture == SystemGesture.Tap)
//Do something
}
IsManipulationEnabled = true
,它将获取所有触摸(当然还有操作)事件。 - Clemens