消息层层传递,遇到安装有事件侦听器的对象,通过事件处理器响应事件,并决定事件是否继续传递;
后置代码中使用AddHandler方法设置事件监听器,该方法的
第一个参数是指定监听的路由事件类型对象,
第二个参数是指定事件处理器,处理器方法由RoutedEventHandler对象包装,
此处要注意,跟原始事件处理器不同的是,
路由事件处理器的第一个参数sender,是监听事件的控件对象在此处就是事件监控器放在的位置对应=》事件的拥有者的对象(上图就是MainWindow对象),而我们要获取是谁激发的事件则是根据
第二个参数e的OriginalSource属性。 当我们捕获到关心的事件时,
控制事件不再继续传播该怎么做呢,事件处理器的第二个参数e有个Handled属性,
该属性是个bool值,设置其为true即可。
事件监控器 可以 在后端指定(如上图),也可以在xaml 前端 指定
通过为ButtonBase(Button的父类)的Click路由事件处理器绑定方法,来实现单击事件的监听。
StackPanel的MouseLeftButtonDown也是一个路由事件,也可以叫“附加事件”。其实“附加事件”也是路由事件,只是个文字游戏,为什么还要另外起个名字呢?原来路由事件的宿主都是那些拥有可视化实体的界面元素(界面用户可以看见的);
而附加事件则不具备显示在用户界面上的能力(grid 、stackpanel等布局的控件)。