WPF系列学习之三(路由事件)
路由事件实际上以一上 列三种方式出现。
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系列学习之三(路由事件)的更多相关文章
- WPF学习之路由事件
原文:http://www.cnblogs.com/lxy131/archive/2010/08/10/1796754.html WPF中新添加了一种事件---路由事件 路由事件与一般事件的区别在于: ...
- WPF 学习笔记 路由事件
1. 可传递的消息: WPF的UI是由布局组建和控件构成的树形结构,当这棵树上的某个节点激发出某个事件时,程序员可以选择以传统的直接事件模式让响应者来响应之,也可以让这个事件在UI组件树沿着一定的方向 ...
- WPF中的路由事件(转)
出处:https://www.cnblogs.com/JerryWang1991/archive/2013/03/29/2981103.html 最近因为工作需要学习WPF方面的知识,因为以前只关注的 ...
- WPF原理剖析——路由事件
一.路由事件与传统事件传统事件的触发者和处理者是紧密相连的,而路由事件则不是,路由事件允许一个元素的事件有另外的元素触发.也即就是说路由事件的拥有者和响应者之间没有显示的订阅关系.事件的拥有者只负责激 ...
- WPF中自定义路由事件
public class MyButtonSimple: Button { // Create a custom routed event by first registering a RoutedE ...
- WPF 中的 路由事件
public class ReportTimeEventArgs:RoutedEventArgs { public ReportTimeEventArgs(RoutedEvent routedEven ...
- WPF手动触发路由事件
MouseButtonEventArgs args = , MouseButton.Left); args.RoutedEvent = UIElement.MouseLeftButtonDownEve ...
- .NET: WPF 路由事件
(一)使用WPF内置路由事件 xaml: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://sc ...
- 【WPF】路由事件
总结WPF中的路由事件,我将学到的内容分为四部分来逐渐掌握 第一部分:wpf中内置的路由事件 以Button的Click事件来说明内置路由事件的使用 XAML代码: <Window x:Clas ...
随机推荐
- 语法之知识点的改进(Func/Action)
上一章我们讲到关于面向对象思想上C#和JAVA之差别.笔者分别从面向对象的三大特性入手.而本章主要讲一些C#改进的知识点.在.NET Framework 2.0之后出现很多新的知识点.这些知识点更是让 ...
- python 基础 8.4 re的 spilt() findall() finditer() 方法
#/usr/bin/python #coding=utf-8 #@Time :2017/11/18 18:24 #@Auther :liuzhenchuan #@File :re的spli ...
- EasyRTMP+EasyDSS实现一套完整的紧急视频回传直播与存储回放方案
需求来源 紧急视频回传云端:即拍即传.云端存储.紧急录像.云拍云录!这些需求现在可能对于我们来说比较远,大部分也是在行业中才会用到,但相信在不就的将来肯定会落地到每个人的手中,因为这是一个自我保护.自 ...
- Java I/O模型从BIO到NIO和Reactor模式(转)
原创文章,转载请务必将下面这段话置于文章开头处(保留超链接).本文转发自技术世界,原文链接 http://www.jasongj.com/java/nio_reactor/ Java I/O模型 同步 ...
- LeetCode:用最少的箭引爆气球【452】
LeetCode:用最少的箭引爆气球[452] 题目描述 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道 ...
- csrf防范笔记
1.验证Http的refer字段 http有一个refer字段,用以记录该http请求的来源地址 好处: 简单便捷,后台开发人员只需要设置一个拦截器 缺点: Referer 的值是由浏览器提供的,虽然 ...
- 算法(Algorithms)第4版 练习 1.3.9
主要思路: 用Dijkstra的双栈算法. 遇到数字则压入数字栈中(String). 遇到运算符则压入运算符栈中(String). 遇到右括号时,从数字栈和运算法栈中弹出相应的元素,生成相应的运算表达 ...
- 游戏引擎基于Handle的资源管理
基于Handle的资源管理方案,第一时间想到的应该是Windows了,但是真正想让我实施这个方案的,是<游戏编程精粹1>里面的游戏资源管理篇章的给出的方案.在<游戏编程精粹1> ...
- iOS Assertion failure in -[UITableView _classicHeightForRowAtIndexPath:]
Assertion failure in -[UITableView _classicHeightForRowAtIndexPath:], /SourceCache/UIKit_Sim/UIKit-3 ...
- C语言实现队列(纯C)
1. [代码][C/C++]代码 #include <stdio.h>#include <stdlib.h>#define ElemType int #define Statu ...