zoukankan      html  css  js  c++  java
  • WPF 路由事件(一)

    1. 定义、注册、包装路由事件

    WPF事件模型与WPF属性模型类似,在依赖项属性一样,路由事件由只读的静态字段表示,在一个静态构造函数中注册,并且通过一个标准的.NET事件定义进行包装。

    例如 Button类提供了熟悉的CLick事件,该事件继承来自抽象的ButtonBase基类,下面的代码说明了该事件是如何被定义和注册的:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Windows;
     6 using System.Windows.Controls;
     7 
     8 namespace SCADA.HMI.Windows
     9 {
    10    public abstract class ButtonBase :ContentControl
    11    {
    12 
    13        /// <summary>
    14        /// 定义事件
    15        /// </summary>
    16        public static readonly RoutedEvent ClickEvent;
    17        /// <summary>
    18        /// 注册事件
    19        /// </summary>
    20        static ButtonBase()
    21        {
    22            ButtonBase.ClickEvent = EventManager.RegisterRoutedEvent
    23                ("Click", RoutingStrategy.Bubble,
    24                 typeof (RoutedEventHandler),
    25                 typeof (ButtonBase));
    26        }
    27 
    28        /// <summary>
    29        /// 添加删除已注册的调用程序
    30        /// </summary>
    31        public event RoutedEventHandler Click
    32        {
    33            add { AddHandler(ButtonBase.ClickEvent,value); }
    34            remove { RemoveHandler(ButtonBase.ClickEvent,value); }
    35        }
    36    }
    37 }

    总结:虽然依赖项属性时使用DependencyProperty.Register()方法注册,而路由事件是使用EventManager.RegisterRoutedEvent()方法注册的。当注册事件时,

    需要指定事件的名称、路由类型、定义事件处理程序语法的委托以及拥有该事件的类。

    通常,路由事件通过普通的.NET事件进行包装,从而使所有.Net语言都能够访问他们。事件包装器可以使用AddHandler()和RemoveHander()添加和删除已注册的调用程序,

    这两种方法都是在FrameWorkElement基类中定义的并被WPF元素继承。

    (未完待续.......)

  • 相关阅读:
    STM32 时钟配置分析
    STM32 开发板资源梳理
    STM32 摄像头实验OV2640
    STM32 TFT液晶屏与FSMC
    STM32 开发板电源与供电方式
    视觉里程计07 Qt的一些bug修改记录
    解决wireshark检测不到网卡的问题
    gdb 脚本调试
    [转] GCC 中的编译器堆栈保护技术
    使用gdbserver远程调试
  • 原文地址:https://www.cnblogs.com/canyuexingchen/p/2986686.html
Copyright © 2011-2022 走看看