WPF 路由事件
时间:2020-04-15
本文章向大家介绍WPF 路由事件,主要包括WPF 路由事件使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
同级或上下级关系时,事件的响应者可订阅事件的发起者;通过委托,事件的响应者使用事件的处理器来做出交互响应。
多级关系时,路由事件的事件拥有者和事件的响应者之间则没有直接的显式订阅关系,事件的拥有者则只负责激发事件,事件将有谁响应它并不知道;事件的响应者则有事件的监听器,针对事件进行监听,当有此类事件传递至此事件响应者就使用事件处理器来相应事件并决定此事件是否继续传递。
var args = new ButtonRoutedEventArgs(MyRouteButton.RoutedClickEvent, this);
args.EventTime = DateTime.Now;
args.EventPublisher = nameof(事件的拥有者);
args.OtherArgs = 其他需要传递参数;
this.RaiseEvent(args);
public 事件的响应者()
{
InitializeComponent();
this.AddHandler(MyRouteButton.RoutedClickEvent, new RoutedEventHandler(RouteButton_Click));
}
private void RouteButton_Click(object sender, RoutedEventArgs e)
{
var ele = sender as FrameworkElement;
var arg = e as ButtonRoutedEventArgs;
if (arg.EventPublisher == nameof(事件的拥有者))
{
var data = arg.OtherArgs as DeliveryConfigDto;
// to do sth
e.Handled = true;
}
}
using System;
using System.Windows;
using System.Windows.Controls;
/// <summary>
/// 自定义路由按钮
/// </summary>
class MyRouteButton : Button
{
/// <summary>
/// 声明和注册路由事件
/// </summary>
public static readonly RoutedEvent RoutedClickEvent = EventManager.RegisterRoutedEvent("RoutedClick", RoutingStrategy.Bubble, typeof(EventHandler<ButtonRoutedEventArgs>), typeof(MyRouteButton));
/// <summary>
/// CLR事件
/// </summary>
public event RoutedEventHandler RoutedClick
{
add { this.AddHandler(RoutedClickEvent, value); }
remove { this.RemoveHandler(RoutedClickEvent, value); }
}
/// <summary>
/// 借用Click事件激发路由事件
/// </summary>
protected override void OnClick()
{
// 保证原有功能正常使用
base.OnClick();
ButtonRoutedEventArgs args = new ButtonRoutedEventArgs(RoutedClickEvent, this);
args.EventTime = DateTime.Now;
args.EventPublisher = this.ToString();
// UIElement及其派生类
this.RaiseEvent(args);
}
}
/// <summary>
/// 路由按钮事件参数
/// </summary>
class ButtonRoutedEventArgs : RoutedEventArgs
{
public ButtonRoutedEventArgs(RoutedEvent routedEvent, object source) : base(routedEvent, source) { }
/// <summary>
/// 事件的发生时间
/// </summary>
public DateTime EventTime { get; set; }
/// <summary>
/// 事件的发布者
/// </summary>
public string EventPublisher { get; set; }
/// <summary>
/// 其他参数
/// </summary>
public object OtherArgs { get; set; }
}
原文地址:https://www.cnblogs.com/wesson2019-blog/p/12706995.html
- YOLO算法的原理与实现
- Batchnorm原理详解
- 【动手实践】Oracle 12.2 新特性:自动的列表分区创建
- AI从业者搞懂---这10种深度学习方法---老婆孩子热炕头
- OpenCV从零基础---检测及分割图像的目标区域
- Spark资源调优
- Tensorflow实战:Discuz验证码识别
- 【动手实践】:Lockdown Profile 的多租户权限控制
- 异步的JavaScript和XML(AJAX)
- JavaScript实现登录注册验证
- jQuery右侧滑动快速导航条
- PHPExcel 表格导入数据代码解析(二)
- php Array数组知识总结
- 抓取远程图片到本地,你会用什么函数?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 二叉树:层序遍历登场!
- 二叉树:前中后序迭代方式的写法就不能统一一下么?
- 二叉树:听说递归能做的,栈也能做!
- 二叉树:一入递归深似海,从此offer是路人
- 关于二叉树,你该了解这些!
- 双指针法:总结篇!
- 栈与队列:总结篇!
- Appium移动端自动化测试--元素操作与触摸动作【移动端自动化测试教程奉上】
- 接口测试Mock利器--moco runner是如何工作的?
- Java中类型判断的几种方式
- 如何实现类似@Component的Spring动态注入功能
- 一次代码优化实践,用了模板方法+策略+工厂方法模式
- 给 JDK 报了一个 P4 的 Bug,结果居然……
- Git | Git Server 搭建
- leetcode树之二叉树的深度