WPF学习系列025: 3.3.1 路由事件的实现
来源:互联网 发布:手游美工 编辑:程序博客网 时间:2024/06/05 17:56
3.3.1 路由事件的实现
- 路由事件的类型为 System.Windows.RoutedEvent
- 所有的路由事件成员都必须是 public、static,并且有一个 Event 作为后缀。
- 路由事件通常通过调用 EventManager.RegisterRoutedEvent 静态方法创建。这个方法需要三个参数:
- 路由事件的名称
- 作为枚举值的事件的路由策略
- 事件处理程序的类型
- 路由事件的所有者类类型
- 路由事件定义完成后,最好添加 .NET 事件包装器(数据接口)实现对路由事件的访问,这样可以在 XAML 中用事件特性语法添加一个事件处理程序。
- 在路由事件的事件包装器中,除了 AddHandler / RemoveHandler 调用外,不应该添加任何其它逻辑。
例如:
public class Button : ButtonBase
{
// 路由事件
public new static readonly RoutedEvent ClickEvent;
static Button()
{
// 注册时间
Button.ClickEvent = EventManager.RegisterRoutedEvent("Click", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(Button));
}
// .NET事件包装器(可选)
public new event RoutedEventHandler Click
{
add
{
this.AddHandler(Button.ClickEvent, value);
}
remove
{
this.RemoveHandler(Button.ClickEvent, value);
}
}
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
// 触发事件
this.RaiseEvent(new RoutedEventArgs(Button.ClickEvent, this));
}
}
注意:
- AddHandler、RemoveHandler这两个方法都是继承自System.Windows.UIElement。通过调用这两个方法可以向一个适当的路由事件添加一个委托或者从路由事件移除一个委托。
- RaiseEvent也是继承自System.Windows.UIElement。它用来触发路由事件。
- public new static readonly RoutedEvent ClickEvent;public new event RoutedEventHandler Click 中关键字new的作用是有意隐藏ButtonBase中对ClickEvent和Click的定义。
- WPF学习系列025: 3.3.1 路由事件的实现
- WPF学习系列024: 3.3 路由事件
- Wpf学习系列1 路由事件
- WPF路由事件的学习
- WPF学习系列027: 3.3.3 路由事件实践
- WPF学习--路由事件
- WPF学习系列026: 3.3.2 路由策略和事件处理程序
- WPF基础路由事件学习
- WPF学习之路由事件
- WPF路由事件学习笔记
- WPF学习之路由事件
- WPF 重要新概念 之 路由事件的实现
- WPF与MVVM的实现(五)注册路由事件
- .NET学习手记之:WPF--路由事件
- WPF学习系列019: 3.2.1 依赖属性的实现
- 使用WPF内置的路由事件
- WPF:路由事件
- wpf路由事件
- WPF学习系列020: 3.2.2 变更通知
- WPF学习系列021: 3.2.3 属性值继承
- WPF学习系列022: 3.2.4 对多个提供程序的支持
- WPF学习系列023: 3.2.5 附加属性
- WPF学习系列024: 3.3 路由事件
- WPF学习系列025: 3.3.1 路由事件的实现
- WPF学习系列026: 3.3.2 路由策略和事件处理程序
- WPF学习系列027: 3.3.3 路由事件实践
- WPF学习系列028: 3.3.4 附加事件
- WPF学习系列029: 3.4 命令
- WPF学习系列031: 3.4.2 使用输入手势执行命令
- WPF学习系列030: 3.4.1 内建命令
- WPF学习系列032: 3.4.3 带有内建命令绑定的控件
- VSS 错误:File names.dat may be corrupt 修复