WPF路由事件中的三种策略介绍

2022-04-17 05:48:00

什么是路由事件

路由事件是具有更强传播能力的事件,它可以在元素树中向上冒泡和向下隧道传播,并且能够沿着传播路径被事件处理程序来处理。

路由事件允许事件在某个元素上被处理,即使这个事件源自于另外一个元素。事件路由允许某个元素的事件由另外一个元素引发。

路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件。路由事件是一个CLR事件。

路由事件与一般事件的区别在于:路由事件是一种用于元素树的事件,当路由事件触发后,它可以向上或向下遍历可视树和逻辑树,他用一种简单而持久的方式在每个元素上触发,而不需要任何定制的代码(如果用传统的方式实现一个操作,执行整个事件的调用则需要执行代码将事件串联起来)。

路由事件的路由策略:

所谓的路由策略就是指:路由事件实现遍历元素的方式。

路由事件一般使用以下三种路由策略:

冒泡路由事件:冒泡路由事件在包含层次中向上传递,即由事件源向上传递一直到根元素。直接路由事件:直接路由事件与普通的.NET事件是非常相似的,他们都起源于一个元素,并且不能够传递给其它的元素。 只有事件源才有机会响应事件。隧道路由事件:从元素树的根部调用事件处理程序并依次向下深入直到事件源。一般情况下,WPF提供的输入事件都是以隧道/冒泡对实现的。隧道事件常常被称为Preview事件。

1、冒泡路由事件

XAML代码如下:

<Window x:Class="WpfRouteEventByBubble.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        Title="MainWindow" Height="190" Width="246" WindowStartupLocation="CenterScreen">    <Grid x:Name="GridRoot" Background="Lime">        <Grid x:Name="GridA" Margin="10" Background="Blue">            <Grid.ColumnDefinitions>                <ColumnDefinition></ColumnDefinition>                <ColumnDefinition></ColumnDefinition>            </Grid.ColumnDefinitions>            <Canvas x:Name="CanvasLeft" Grid.Column="0" Background="Red" Margin="10">                <Button x:Name="ButtonLeft" Width="65" Height="100" Margin="10" Content="Left"></Button>            </Canvas>            <Canvas x:Name="CanvasRight" Grid.Column="1" Background="Yellow" Margin="10">                <Button x:Name="ButtonRight" Width="65" Height="100" Margin="10" Content="Right"></Button>            </Canvas>        </Grid>    </Grid></Window>

运行效果如下所示:

事件已处理,在这里停止。RoutedEvent---真正的路由事件对象,(如Button.ClickEvent)当一个事件处理程序同时用于多个路由事件时,它可以有效地识别被出发的事件。

以上所述是小编给大家介绍的WPF路由事件中的三种策略,希望对大家有所帮助。在此也非常感谢大家对我们网站的支持!