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

C# 路由事件

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-08

    WPF中存在一種路由事件(routed event)。標(biāo)準(zhǔn)的.NET事件會(huì)被顯式訂閱該事件的代碼處理,且只發(fā)送到這些訂閱者那里。路由事件的不同之處在于,可將事件發(fā)送到包含該控件所在層次的所有控件。


    當(dāng)路由事件發(fā)生時(shí).它會(huì)向發(fā)生該事件的控件的上層與下層控件傳遞。也就是說(shuō),如果右擊了某個(gè)按鈕,會(huì)首先將MouseRightButtonDown事件發(fā)送給該按鈕本身,然后發(fā)送給該控件的父控件,在之前的示例中,就是Grid控件。如果Grid控件未處理該事件,該事件會(huì)最終傳遞給窗口。如果不希望該事件被繼續(xù)傳往更高的控件層次,只需要將RoutedEventArgs的屬性Handled設(shè)置為true即可,此時(shí)不會(huì)再發(fā)生其他調(diào)用。當(dāng)某個(gè)事件像這樣往上層傳遞時(shí),就稱其為冒泡事件(bubblingevent)。


    路由事件也可以往其他方向傳遞,例如從根元素傳往執(zhí)行操作的控件。這樣的事件被稱為下鉆事件(tunneling event),并且按照約定,所有這類事件都應(yīng)該加上Preview前綴,井且總是在相應(yīng)的冒泡事件之前發(fā)生。PreviewMouseRightButtonDovvn 事件就屬于這一類。


    最后需要說(shuō)明的是,路由事件的行為也可以和標(biāo)準(zhǔn)的.NET事件一樣,只發(fā)送給執(zhí)行操作的控件。

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

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