位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 路由事件

提問人:劉團圓發(fā)布時間:2020-12-08

    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í)行操作的控件。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(0)
返回頂部