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