C# 路由事件
WPF中存在一種路由事件(routed event)。標準的.NET事件會被顯式訂閱該事件的代碼處理,且只發(fā)送到這些訂閱者那里。路由事件的不同之處在于,可將事件發(fā)送到包含該控件所在層次的所有控件。
當路由事件發(fā)生時.它會向發(fā)生該事件的控件的上層與下層控件傳遞。也就是說,如果右擊了某個按鈕,會首先將MouseRightButtonDown事件發(fā)送給該按鈕本身,然后發(fā)送給該控件的父控件,在之前的示例中,就是Grid控件。如果Grid控件未處理該事件,該事件會最終傳遞給窗口。如果不希望該事件被繼續(xù)傳往更高的控件層次,只需要將RoutedEventArgs的屬性Handled設置為true即可,此時不會再發(fā)生其他調(diào)用。當某個事件像這樣往上層傳遞時,就稱其為冒泡事件(bubblingevent)。
路由事件也可以往其他方向傳遞,例如從根元素傳往執(zhí)行操作的控件。這樣的事件被稱為下鉆事件(tunneling event),并且按照約定,所有這類事件都應該加上Preview前綴,井且總是在相應的冒泡事件之前發(fā)生。PreviewMouseRightButtonDovvn 事件就屬于這一類。
最后需要說明的是,路由事件的行為也可以和標準的.NET事件一樣,只發(fā)送給執(zhí)行操作的控件。
點擊加載更多評論>>