WPF学习笔记(二)----Events, Commands

本文详细介绍了WPF编程中路由事件与命令配置的核心概念,包括事件的定义、注册、封装,以及三种路由事件的区别。同时,阐述了如何使用EventManager类管理路由事件,并通过实例展示了命令配置的基本原理,旨在提升开发者对WPF用户界面响应能力的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、配置事件和事件处理(Configuring Events and Event Handling)

事件在WPF编程是明显不同于那些在传统的Windows窗体的编程。WPF使用路由事件,可以存在多个控制和多个处理程序。路由事件允许您添加多个层次的复杂性和复杂的用户界面,响应用户输入。学习路由事件,包括如何处理一个路由事件,定义和注册一个新的路由事件,处理应用程序生命周期事件,并使用EventManager类。

1.1 下面使用一个实例说明如何定义、注册、封装路由事件

public abstract class ButtonBase: ContentControl,...
{
    //定义事件
    public static readonly RoutedEvent ClickEvent;    
    //注册事件(需要指定事件的名称、路由类型、事件处理程序语法的委托以及拥有该事件的类)
    static ButtonBase()
    {
        ButtonBase.ClickEvent=EventManager.RegisterRoutedEvent("Click",RoutingStrategy.Bubble,
        typeof(RoutedEventHandler),typeof(ButtonBase));
        ...
    }    
    //事件的封装    
    public event RoutedEventHandler Click
    {
        add
        {
            base.AddHandler(ButtonBase.ClickEvent,value);
        }
        remove
        {
            base.RemoveHandler(ButtonBase.ClickEvent,value);
        }
    }    
}

1.2、三种路由事件:直接路由事件、冒泡路由事件、隧道路由事件

直接路由事件:与普通的.net事件类似,它们源于同一个元素,不传递给其他元素。例如,MouseEnter事件(当鼠标移到元素时发生)是直接路由事件

冒泡路由事件:在包含层次中向上传递的事件,例如事件由某一元素引发,然后被该元素的父元素引发,然后被父元素的父元素引发,一直到WPF到达元素树的顶部为止

隧道路由事件:在包含层次中向下传递的事件,它为控件的预览事件提供了机会。

RoutedEventArgs类的属性

.Source :指示引发了事件的对象

.OriginalSource: 指示了最初是什么对象引发了事件

.RoutedEvent:通过事件处理程序为触发的事件提供RountEvent对象

.Handled: 属性值为true时,该属性终止事件的冒泡或者隧道过程。

1.3、EventManager类

EventManager 是管理所有WPF 路由事件注册的静态类

EventManager 类的方法:

.GetRoutedEvents:返回应用程序中被注册的所有的路由事件

.GetRoutedEventsForOwner:返回应用程序中所有被注册的特殊元素的路由事件

.RegisterClassHandler:注册一个类级别的事件处理程序

.RegisterRoutedEvent: 注册一个实例级别的事件处理程序

2、配置命令(Configuring Commands)

WPF 命令增加了两个重要的特性,1)、将事件委托到适当的命令;2)、使控件的启用状态和相应命令的状态保持同步。

如图所示:

WPF对以下几个方面没有提供任何支持:

.命令跟踪(保留最近命令历史)

.“可撤销命令”

.具备状态并可处于不同模式的命令。

 

转载于:https://www.cnblogs.com/20141209cy/p/4201654.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值