按照WPF的幫助說明,某些控件的路由事件被內部處理了,已經被標記爲Handled,自行定義的事件處理代碼便再也不起做用了,有時候會很鬱悶!html
不過WPF提供了必要的方法。3d
1)使用相應的Preview事件。須注意隧道類型的事件是從根元素開始執行的。orm
2)使用AddHandler添加自定義的路由事件。htm
MouseDown事件的說明blog
AddHandler方法的說明事件
遺憾的是,彷佛並無明確說明哪些控件有這樣的處理。按鈕 Button 就是這樣的一個控件。按照正常的方法編寫事件處理代碼,其MouseDown事件(還有MouseUp等)是不會響應的(在別的地方看到,說是這些事件都被Click事件代替了);使用AddHandler以後才能夠。路由
下圖是沒有給Button使用AddHandler方法時,鼠標點擊Button中的TextBlock時的事件響應。get
下圖則是給Button使用AddHandler方法添加了自定義路由事件時,鼠標點擊Button中的TextBlock時的事件響應。CancelButton.AddHandler(Button.MouseDownEvent, new RoutedEventHandler(MyRoutedEventHandler), true);bfc
程序代碼在這裏:http://files.cnblogs.com/glowworm/wpfTest.rarfile
原文地址:https://www.cnblogs.com/glowworm/archive/2010/06/19/1760993.html