原文:
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大神有說~