WPF之路-路由事件

本文介绍了WPF中的路由事件,包括冒泡、隧道和直接策略。通过示例展示了事件如何在元素树中传递,解释了Preview事件作为隧道事件的特点,并探讨了直接策略下事件仅在事件源触发的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

理解路由事件

路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件,也就是说,触发事件源的父级或子级如果都有对该事件的监听,则都能触发事件

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

路由事件的路由策略

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

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

  1. 冒泡:由事件源向上传递一直到根元素
  2. 直接:只有事件源才有机会响应事件
  3. 隧道:从元素树的根部调用事件处理程序并依次向下深入直到事件源

一般情况下,WPF提供的输入事件都是以隧道/冒泡对实现的。隧道事件常常被称为Preview事件

冒泡

程序设计思路是,将多个Grid嵌套起来,构成父子结构,在最底层支Grid上定义一个按钮,绑定一个单击事件,并且按钮的所有低级元素都绑定该事件,它们使用同一个事件处理程序;再定义一个ListBox,当事件处理程序执行的时候,打印出事件激发者的名字,这样便能看到事件执行的顺序

下图是界面设计:

下面是XMAL代码,按钮和每一个Grid都绑定了Button.Click="Btn_Click"

<Window x:Class="WPF_CODE.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <!--最外层的Grid-->
    <Grid Button.Click="Btn_Click" Name="Grid_1" Background="#FF43AEAE">
        <!--定义两行-->
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>

        <!--第二层Grid-->
        <Grid Button.Click="Btn_Click" Name="Grid_2"  Margin="10" Background="#FF8D888D" Grid.Row=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值