天天看點

WPF 路由事件

原文:

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