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元素继承。

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

  • 相关阅读:
    Java并发容器总结
    ReentrantLock源码分析
    webpack插件之webpack-dev-server
    webpack插件之htmlWebpackPlugin
    webpack配置之webpack.config.js文件配置
    webpack的安装和运行
    webpack安装大于4.x版本(没有配置webpack.config.js)
    webpack安装低于4版本(没有配置webpack.config.js)
    什么是webpack以及为什么使用它
    webpack前置知识2(JavaScript项目初始化)
  • 原文地址:https://www.cnblogs.com/canyuexingchen/p/2986686.html
Copyright © 2011-2022 走看看