WPF路由事件
我做了一个例子来探求路由事件的传递过程。
在Window中添加一个Label和一个Button。

为这三个元素添加分别添加tunneling事件PreviewMouseLeftButtonDown和bubbling事件MouseLeftButtonDown,同时为Button增加Click事件。代码如下:
可以看到每个事件的代码其实就是在txtMessage中显示该事件的特征字符串。
点击Label,txtMessage显示的文本是WT LT LP WP 。这意味着点击Label的时候,WPF首先从根元素Window开始沿着逻辑树下行直到事件的发起者Label,执行各个元素的tunneling事件;接着从Label开始向上直到Window,执行各个元素的bubbling事件。
这四个事件的第二个参数MouseButtonEventArgs e是引用了同一个实例。可以分别在这四个事件中添加e.Handled = true来证明这个观点。
接着点击Button,txtMessage显示的文本是WT BT ButtonClick。可以看到Button控件默认中止了bubbling事件。




浙公网安备 33010602011771号