路由事件实际上以一上 列三种方式出现。
    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. 视频服务之ffmpeg部署

    FFmpeg介绍 FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序. 采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案. 它包含了非常先进 ...

  2. struts2的 defalut-action-ref 的使用

    这个配置的用法有值得注意的地方,所以才记录下来: 一般default-action-refer配置的action是在浏览器中输入的网址只输入到项目时或输入错误的action时 所进入的action,一 ...

  3. php调用短网址接口

    <?php $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,"http://dwz.cn/create.php"); curl_se ...

  4. php异步任务处理: gearman

    Gearman是一个用来把工作委派给其他机器.分布式的调用更适合做某项工作的机器.并发的做某项工作在多个调用间做负载均衡 准备软件包 gearmand-1.1.12.tar.gz gearman-1. ...

  5. iOS 蓝牙开发之(mutipeerConnectivity)

    蓝牙 mutipeerConnectivity iOS7 引入的一个全新框架 替代GameKit框架 多用于文件传输 iOS设备不联网也能给附近的人聊天 搜索和传输的方式 * 双方WIFI和蓝牙都没有 ...

  6. 我的Android进阶之旅------>Android如何去除GridView的按下或点击选中后的背景效果

    今天用GridView做了一个界面,自己自定好了一个组件,并且设置好了点击和不点击组件时候的效果,但是运行的时候发现在我定义好的背景下面还有一层不知道哪儿来的背景,严重影响了我自定义的组件的效果. 后 ...

  7. discuz论坛搬家

    很多站长第一次做网站的时候,无奈选择了速度不是很稳定的空间,慢慢会发现有很多物美价廉速度相当快的空间 这个时候,站长在网站搬家的过程中就会遇到很多困难,今天老袋鼠给大家详细讲解一下discuz论坛搬家 ...

  8. FastJson处理Map List 对象

     Fastjson是一个Java语言编写的高性能功能完善的JSON库. Fastjson是一个Java语言编写的JSON处理器,由阿里巴巴公司开发. 1.遵循http://json.org标准,为其官 ...

  9. linux日常开发使用命令整理

    linux: 安装ssh-server:$ sudo apt-get install openssh-server 更新软件库:$ sudo apt-get update 启动ssh:$ sudo / ...

  10. 为什么在实际的 kaggle 比赛中 gbdt 和 random forest 效果非常好?

    https://www.zhihu.com/question/51818176/answer/127637712