最近在学习WPF中深深感觉到微软的高大上,在iOS中处理事件的机制是响应者链条,触发事件时从最外层一层一层的视图往里面找实现方法,当有响应方法时就终止。这点有点类似于WPF中的隧道路由事件。
在WPF中的事件叫做路由事件
事件定义
public static readonly RoutedEvent ClickEvent;
事件注册
ButtonBase.ClickEvent = EventManager.RegisterRoutedEvent("click",routingStrategy.Bubble,typeof(RoutedEventHandle),typeof(ButtonBase));
引发事件
routedEventArgs e = new RoutedEventArgs(ButtonBase.ClickEvent,this)
base.RaiseEvent(e);
路由事件分为三种方式出现:
第一:与普通的.NET事件类似的直接事件(direct event),他们源于一个元素,不传递给其他元素,例如MouseEnter事件。
第二:在包含层次中向上传递的冒泡路由事件(bubbling event) 例如MouseDown事件,事件首先由被单击的元素引发,接下来被该元素的父元素引发,一级一级向上传递,直到到达元素树的顶部
第三:在包含层次中向下传递的隧道路由事件(tunneling event)隧道路由事件在事件到达恰当的控件之前为预览事件(甚至终止事件)提供了机会。例如,通过PreviewKeyDown事件可以截获是否按下某个键。首先在窗口级别上,然后是更具体的容器,直至到达当时按下键时具有焦点的元素。