原文:
WPF 路由事件
最近想封装一个关于手势的控件,但是由其他的控件覆盖之后发现不能触发,据说是有一些事件在定义的时候就处理过e.Handle了。
定义的时候就处理了,就是为了控件能够正常的工作,别如Button.MouseDown什么的。
当你写Click事件的时候是能够触发的,但是Button.MouseDown是不会触发的,估计是封装Click事件的时候就e.Handle处理了。
使用Preview事件,即Touch系列的事件都换成PreviewTouch事件。(这里如果Preview被处理了呢?不过写的是父控件,Preview一定会被触发)
PreviewTouch事件与普通Touch事件又有什么区别呢?
参考Pro WPF中,PreviewTouch是隧道事件,普通Touch是冒泡事件。
<Grid>
<StackPanel>
<Button/>
</StackPanel>
</Grid>
隧道:父(Grid)->子(StackPanel)->孙(Button) 视觉树的根->叶
冒泡:孙(Button)->子(StackPanel)->父(Grid) 视觉树的叶->根
这里面是说的事件触发顺序,先是隧道事件后是冒泡事件,这里是使用e.Handle测试过了。
这里又想到了一些问题:
Touch与Manipulation事件之间有什么区别?
那么我们回归本质的话,那就是三个问题(what,when,how):什么是Manipulation?什么时候使用Manipulation?怎么使用Manipulation?
Manipulation是微软基于Touch系列事件的再一次封装。
就是你用用Manipulation支持的一系列操作的时候用。
怎么用。。。。。。。。Gnie大神有说~