最近在學習WPF中深深感覺到微軟的高大上危融,在iOS中處理事件的機制是響應者鏈條垢油,觸發(fā)事件時從最外層一層一層的視圖往里面找實現(xiàn)方法缕坎,當有響應方法時就終止。這點有點類似于WPF中的隧道路由事件虱肄。
在WPF中的事件叫做路由事件
事件定義
public ?static ?readonly RoutedEvent ?ClickEvent;
事件注冊
ButtonBase.ClickEvent = EventManager.RegisterRoutedEvent("click",routingStrategy.Bubble,typeof(RoutedEventHandle),typeof(ButtonBase));
引發(fā)事件
routedEventArgs e = new RoutedEventArgs(ButtonBase.ClickEvent,this)
base.RaiseEvent(e);
路由事件分為三種方式出現(xiàn):
第一:與普通的.NET事件類似的直接事件(direct event),他們源于一個元素交煞,不傳遞給其他元素咏窿,例如MouseEnter事件。
第二:在包含層次中向上傳遞的冒泡路由事件(bubbling event) 例如MouseDown事件素征,事件首先由被單擊的元素引發(fā)集嵌,接下來被該元素的父元素引發(fā),一級一級向上傳遞御毅,直到到達元素樹的頂部
第三:在包含層次中向下傳遞的隧道路由事件(tunneling event)隧道路由事件在事件到達恰當?shù)目丶盀轭A覽事件(甚至終止事件)提供了機會根欧。例如,通過PreviewKeyDown事件可以截獲是否按下某個鍵端蛆。首先在窗口級別上凤粗,然后是更具體的容器,直至到達當時按下鍵時具有焦點的元素今豆。