路由事件实际上以一上 列三种方式出现。
    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. XP,32/64位Win7,32/64位Win8,32/64位Win10系统 【春节版】

    本系统是10月5日最新完整版本的Windows10 安装版镜像,win10正式版,更新了重要补丁,提升应用加载速度,微软和百度今天宣布达成合作,百度成为win10 Edge浏览器中国默认主页和搜索引擎 ...

  2. Awesome Vue.js vue.js学习资源链接大全 中文

    https://blog.csdn.net/caijunfen/article/details/78216868

  3. 50道JAVA基础编程练习题 - 题目

    50道JAVA基础编程练习题[1]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? [2]题目:判断 ...

  4. 九度OJ 1021:统计字符 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5418 解决:3146 题目描述:     统计一个给定字符串中指定的字符出现的次数. 输入:     测试输入包含若干测试用例,每个测试用 ...

  5. Netty入门 - 秒懂

    目录 Netty 入门 前言: 建立项目 编写一个Discard Handler 处理器 编写一个Discard 服务器 线程组 启动帮助类 设置Channel 通道的选项 测试:发送消息到Disca ...

  6. Python爬虫-- selenium库

    selenium库 selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(S ...

  7. SAP-Function

    [转]sap函数大全 ********SAP中常用函数 函数名 描述SD_VBAP_READ_WITH_VBELN 根据销售订单读取表vbap中的信息EDIT_LINES 把READ_TEXT返回的L ...

  8. Node.js学习笔记(1):Node.js快速开始

    Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...

  9. 【html学习整理】常用标签

    什么是html 超文本标记语言 html语法规则       所有的命令放到<> 大部分成对存在,以<tag>开始,</tag>结束 网页的基本框架,常用的标记 & ...

  10. 【LeetCode】最大子序和

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 ...