路由事件
路由事件
路由事件是指一些在试图树中按照它们的路由规则可上抛或下抛的事件。 这种路由事件经常有“管道”、“冒泡”、“直接”。 可以将事件处理器直接挂接在添加事件的元素上,也可以通过附加属性语法“Button.Click="Button_Click",
”挂接在他上面或者下面的其他元素上。
路由事件一般是成对出现的。第一个是管道事件如“PreviewMouseDown”,第二个事件是冒泡事件如“MouseDown”。它们在触发一个事件处理器后并不会停止路由,直到设置了e.Handled = true为止;
- 管道 这种事件添加在跟元素上,并沿着视图树向下传输直到它遇到资源元素或者被标记的处理器停止了管道路由。 一般命名以
Previer开头,并出现在相关的冒泡事件之前
. - 冒泡 这种事件添加在资源元素上,并沿着视图树向上传输直到它遇到根元素或者被标记的处理器停止了冒泡路由。 冒泡事件一般添加在管道事件的后面。
- 直接 这种事件添加在资源元素上并只能有资源元素自己处理。跟.Net的事件行为很相似。
创建路由事件
代码
// Register the routed event
public static readonly RoutedEvent SelectedEvent =
EventManager.RegisterRoutedEvent( "Selected", RoutingStrategy.Bubble,
typeof(RoutedEventHandler), typeof(MyCustomControl));
// .NET wrapper
public event RoutedEventHandler Selected
{
add { AddHandler(SelectedEvent, value); }
remove { RemoveHandler(SelectedEvent, value); }
}
// Raise the routed event "selected"
RaiseEvent(new RoutedEventArgs(MyCustomControl.SelectedEvent));