路由事件
路由事件
路由事件是多个事件按照它们的路由策略在可视化树中向上或者向下传播。路由策略可以是冒泡、隧道或直达。你可以在引发事件的元素或者元素的上方或者下方,通过附加事件语法Button.Click="Button_Click"在元素上挂钩一个事件处理器。
路由事件通常成对出现。第一个是被称为PreviewMouseDown的隧道事件,第二个是被称为MouseDown的冒泡事件。它们不停止路由,如果它们没有找到一个事件处理器。为了暂停路由,你可以设置e.Handled = true(e指的是事件处理器的事件参数e)。
- 隧道
这个事件被根元素引发,然后沿着可视化树向下传播,直到到达源元素或者隧道过程中被事件处理器处理而停止。命名约定是以Preview为前缀,总是出现在相应的冒泡事件之前。 - 冒泡
事件被源元素引发,然后向着可视化树向上传播,直到到达根元素或者冒泡过程中被事件处理器处理而停止。冒泡事件总是在隧道事件之后引发。 - 直达
事件被源元素引发,必须源元素它自己处理。这个行为与普通的.NET事件相似。
如何创建自定义路由事件
//注册事件
public static readonly RoutedEvent SelectedEvent = EeventManager.RegisterRountedEvent("Selected",RoutingStrategy.Bubble,typeof(RoutedEventHandler),typeof(MyCustomControl));
//.NET属性包装器
public event RoutedEventHandler Selected
{
add { AddHnalder(SelectedEvent, value); }
remove { RemoveHandler(SelectedEvent, value); }
}
//引发事件
RaiseEvent(new RoutedEventArgs(MyCustomControl.SelectedEvent));

浙公网安备 33010602011771号