WPF中路由事件的应用

  1.首先,查下MSDN里面的定义:

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

  实现定义:路由事件是一个 CLR 事件,可以由 RoutedEvent 类的实例提供支持并由 Windows Presentation Foundation (WPF) 事件系统来处理。

  然后,路由事件里面使用以下三个路由策略:冒泡、隧道、直接。简单的说就是冒泡事件是从事件源到根元素一次被引发,而隧道则相反。直接则是只有源元素本身调用以及相应。如果比较形象一点的话可以看一下这个http://www.cnblogs.com/WilliamJiang/archive/2012/02/09/2344697.html

 

       <StackPanel Name="stackPanel" Width="200" Height="100" Background="LightGray" Orientation="Horizontal" PreviewMouseUp="StackPanel_MouseUp">
            <Label Name="label" Width="50" Content="Label" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewMouseUp="Label_MouseUp" Background="YellowGreen"/>
        </StackPanel>
        private void StackPanel_MouseUp(object sender, MouseButtonEventArgs e) {
          MessageBox.Show("Panel");
        }

        private void Label_MouseUp(object sender, MouseButtonEventArgs e) {
            MessageBox.Show("Label");
        }        

 

  以例子来说,如果这是一个panel,在panel里面有一个label,在panel和label上都触发mouseup(冒泡),则点击label时,会先触发label里面的事件(Show一个Label),再触发panel里面的事件(Show一个Panel)。隧道则相反。

   如果希望不引发事件到根元素或者事件源,只需要在对应的事件中加入e.Handled = true;(冒泡是在Label中加入,则隧道是在Panel中加入),这样的话就可以不互相干扰的触发想要触发的元素。

转载于:https://www.cnblogs.com/socialdk/archive/2012/09/08/2676657.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值