路由事件实际上以一上 列三种方式出现。
    1.与普通的.net事件类似的直接路由事件。它们起源于一个元素,并且不传递给其他元素。例如:MouseEnter事件。
    2.在包含层次中向上传递的冒泡路由事件。例如:MouseDown事件就是一个冒泡路由事件。它首先由被单击的元素引发,接下来被该元素的父元素引发,然后被父元素的父元素引发,以此类推,直到WPF到达元素树的顶部为之。
     3.在包含层次的向下传递的隧道路由事件。道道路由事件在事件到达恰当的控件之前为预览事件提供了机会。例如:通过PreviewKeyDown事件可以裁获是否按下了一个键,
附加路由事件:就是当一个控件没有定义某个路由事件时可以为其动态的添加事件如下:
  <Window x:Class="StudyWPF.Hanlder"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Hanlder" Height="600" Width="400">
    <StackPanel ButtonBase.Click="btn_Click">
        <Button Name="btntest1">btntest1</Button>
        <Button Name="btntest2">btntest1</Button>
        <Button Name="btntest3">btntest1</Button>
        <Button Name="btntest4">btntest1</Button>

</StackPanel>

后台中写:  private void btn_Click(object send, RoutedEventArgs e)
        {
            MessageBox.Show("asdfasd");
        }
</Window>
StackPanel没有定义Click事件所以可以在后台程序窗口初始化时为其附加路由事件如下:
也可以向上面代码一样添加Button.Click="后台定义的Click事件"
pnlButtons.AddHandler(Button.Click,new RoutedEventHandler(自己定义的Click事件));
而在btn_click事件中可以通过查看
   if(send=="btnname1"){做它的事;}
else if (sender=="btnname2"){做它的事;}
else .....

也可以在按键中添加tag属性="123"

而在后台的click事件中添加如下判断:
if(sender.Tag=="asdas") {做它自己的事;}
                      隧道路由事件:
   
   隧道路由事件的工作方式和冒泡路由事件相同,但方向相反。如PreviewMouseUP事件,首先在窗口中被引发,然后其中的Grid控件,接下来在StackPanel面板中被引发,依此类推,直到实际源头,它们都以Preview开头且它们都以冒泡路由事件之前被触发,

WPF系列学习之三(路由事件)的更多相关文章

  1. WPF学习之路由事件

    原文:http://www.cnblogs.com/lxy131/archive/2010/08/10/1796754.html WPF中新添加了一种事件---路由事件 路由事件与一般事件的区别在于: ...

  2. WPF 学习笔记 路由事件

    1. 可传递的消息: WPF的UI是由布局组建和控件构成的树形结构,当这棵树上的某个节点激发出某个事件时,程序员可以选择以传统的直接事件模式让响应者来响应之,也可以让这个事件在UI组件树沿着一定的方向 ...

  3. WPF中的路由事件(转)

    出处:https://www.cnblogs.com/JerryWang1991/archive/2013/03/29/2981103.html 最近因为工作需要学习WPF方面的知识,因为以前只关注的 ...

  4. WPF原理剖析——路由事件

    一.路由事件与传统事件传统事件的触发者和处理者是紧密相连的,而路由事件则不是,路由事件允许一个元素的事件有另外的元素触发.也即就是说路由事件的拥有者和响应者之间没有显示的订阅关系.事件的拥有者只负责激 ...

  5. WPF中自定义路由事件

    public class MyButtonSimple: Button { // Create a custom routed event by first registering a RoutedE ...

  6. WPF 中的 路由事件

    public class ReportTimeEventArgs:RoutedEventArgs { public ReportTimeEventArgs(RoutedEvent routedEven ...

  7. WPF手动触发路由事件

    MouseButtonEventArgs args = , MouseButton.Left); args.RoutedEvent = UIElement.MouseLeftButtonDownEve ...

  8. .NET: WPF 路由事件

    (一)使用WPF内置路由事件 xaml: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://sc ...

  9. 【WPF】路由事件

    总结WPF中的路由事件,我将学到的内容分为四部分来逐渐掌握 第一部分:wpf中内置的路由事件 以Button的Click事件来说明内置路由事件的使用 XAML代码: <Window x:Clas ...

随机推荐

  1. C# Array类的浅复制Clone()与Copy()的差别

    1 Array.Clone方法 命名空间:System 程序集:mscorlib 语法: public Object Clone() Array的浅表副本仅复制Array的元素,不管他们是引用类型还是 ...

  2. ABAP 弹出框 函数

    POPUP_GET_VALUES_USER_HELP 是一个和用户交互信息的函数,用户能够填写信息,并且我们还能够依据实际的需求对弹出框进行F1 F4 以及用户的需求进行增强.具体的实现能够參考系统标 ...

  3. NVR硬件录像机web无插件播放方案功能实现之相关接口注意事项说明

    该篇博文主要用来说明EasyNVR硬件录像回放版本的相关接口说明和调用的demo: 方便用户的二次开发和集成. 软件根目录会包含接口文档的,因此,本文主要是对一些特定接口的说明和接口实现功能的讲解以及 ...

  4. ptyhon ORM mongoengine

    参考资料:http://www.tuicool.com/articles/bMvI7vN from mongoengine import * from datetime import datetime ...

  5. Elasticsearch集群UNASSIGNED

    Elasticsearch集群UNASSIGNED http://shineforever.blog.51cto.com/1429204/1859734 http://www.searchtech.p ...

  6. c#数组的count()和length的区别

    C# 数组中 Length 表示数组项的个数,是个属性. 而 Count() 也是表示项的个数,是个方法,它的值和 Length 一样.但实际上严格地说 Count() 不是数组的内容,而是 IEnu ...

  7. Smarty入门学习

    --------------------------------- 安装和设置 --------------------------------- require('../Smarty/Smarty. ...

  8. 如何查看apache配置文件路径

    我是用https://lamp.sh/安装的,apache配置文件位置在:/usr/local/apache/conf/httpd.conf如果是直接安装的apache,配置文件应该在:/etc/ht ...

  9. <raspberry pi > 用树莓派来听落网电台

    树莓派放在抽屉里吃灰有半年多了,去年玩了1个月后就没怎么开整了,上个月没工作,刚好有点闲暇,就把树莓派翻出来折腾,刚好碰到落网改版了,想起以前在树莓派论坛看到有网友拿树莓派来听豆瓣电台,代码那时我都下 ...

  10. 吴恩达机器学习笔记(九) —— 异常检测(Anomaly detection)

    主要内容: 一.模型介绍 二.算法过程 三.算法性能评估及ε(threshold)的选择 四.Anomaly detection vs Supervised learning 五.Multivaria ...