我们都知道路由事件,而附加事件用的比较少。
但如果是通用的场景,类似附加属性,附加事件就很有必要的。
举个例子,输入设备有很多种,WPF中输入事件主要分为鼠标、触摸、触笔:WPF 屏幕点击的设备类型 - 唐宋元明清2188 - 博客园 (cnblogs.com)
有这么多输入事件Mouse、Touch、Stylus,另外按钮Click还处理了冒泡事件,事件类型就更多了。
但绝大部分业务其实并不关心事件类型,只需要一个触发事件就行了。
所以我们有这样的需求:设计并提供一个通用的输入事件,大家只需要拿到事件进行业务操作。另外一些小场景,如果需要具体事件如触摸点集,可以从事件源参数内部去获取。
具体的通用输入事件,我们另外讨论,这里主要描述如何自定义附加事件
附加事件
WPF官方对附加事件的描述 - 附加事件概述 - WPF .NET Framework | Microsoft Learn
所以我们先定义一个附加事件类:
1 public class DeviceEvents 2 { 3 /// <summary> 4 /// 按压事件 5 /// </summary> 6 public static readonly RoutedEvent PreviewDeviceDownEvent = EventManager.RegisterRoutedEvent("PreviewDeviceDown", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(DeviceEvents)); 7 public static void AddPreviewDeviceDownHandler(DependencyObject d, RoutedEventHandler handler) 8 { 9 (d as UIElement)?.AddHandler(DeviceEvents.PreviewDeviceDownEvent, handler); 10 } 11 public static void RemovePreviewDeviceDownHandler(DependencyObject d, RoutedEventHandler handler) 12 { 13 (d as UIElement)?.RemoveHandler(DeviceEvents.PreviewDeviceDownEvent, handler); 14 } 15 }
12-29 14:50