路由事件
路由事件是具有更强传播能力的事件---他们可在元素树中向上冒泡和向下隧道传播,并且沿着传播路劲被事件处理程序处理。
路由事件和依赖项属性模型类似。
WPF的Button类提供了大家属性的Click事件,改时间继承自抽象的ButtonBase基类
Public abstract class ButtonBase:ContentControl......
{
Public static readonly RoutedEcent ClickEvent;
Static ButtonBase()
{
ButotnBase.ClickEvent=EventManager.RegisterRoutedEvent(
“Click”,RoutingStrategy.Bubble,Typeof(RoutedEventHandler),eypeof(ButtonBase));
}
Public event RoutedEventHandler Click
{
Add
{
base.AddHandler(ButtonBase.ClickEvent,value);
}
Remove
{
base.RemoveHandler(ButtonBase.ClickEvent,value);
}
}
}
注册事件时需要指定事件的名称,路由类型,定义事件处理程序语法的委托以及事件的拥有着
共享路由事件:与依赖项属性一样,可在类之间共享路由事件的定义。例如,UIElement使用MouseUp事件,MouseUp时间是在Windows.Inout.Mouse类定义的,UIElement类只通过RoutedEvented.AddOwer方法重用MouseUp事件
UIElement.MouseUpEvent=Mouse.MouseUpEvente.AddOwer(typeof(UIElement));
冒泡路由事件:从元素开始向该元素的父元素传递,直至顶层元素。
隧道路由事件:从顶层容器开始到具体元素,
WPF事件有下面几大类
v 生命周期事件:元素被初始化,加载或卸载时发生。
v 鼠标事件:鼠标动作的结果。
v 键盘事件:键盘动作的结果。
v 手写笔事件:类似钢笔,平板电脑上手写笔代替鼠标。
v 多点触控事件:触摸屏的一些动作。
生命周期事件:
Initialized 当元素被实例化,并以根据XAML标记设置了元素的属性后发生,这是元素已经初始化,但窗口的其他部分可能尚未初始化。此外,尚未应用样式和数据绑定。
Loaded 当整个窗口已经初始化并应用了样式和数据绑定,该事件发生,这是元素被呈现之前最后一站。
Unloaded 当元素被释放时发生,原因是包含元素的窗口被关闭或特定的元素被从窗口中删除。
当创建窗口时,会自下而上的初始化每一个分支元素,这意味着,位于深层的嵌套元素在他的容器之前被实例化。当引发初始化事件时,可确保元素树中当前元素一下的元素已经全部完成实例化,但是包含当前元素的元素可能还没有初始化,每个元素初始化后,还需要在他们的容器中进行布局,应用样式。如果需要的话,还会绑定到数据源。一旦完成初始化,就会进入Loaded事件,Loaded事件的发生过程和Initialized事件的发生过程相反。