zoukankan      html  css  js  c++  java
  • 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中加入),这样的话就可以不互相干扰的触发想要触发的元素。

  • 相关阅读:
    文件上传
    大三寒假学习进度笔记Day16
    大三寒假学习进度笔记Day15
    大三寒假学习进度笔记Day14
    大三寒假学习进度笔记Day13
    大三寒假学习进度笔记Day12
    大三寒假学习进度笔记Day11
    大三寒假学习进度笔记Day10
    Java命名规范
    架构漫谈阅读笔记03
  • 原文地址:https://www.cnblogs.com/socialdk/p/2676657.html
Copyright © 2011-2022 走看看