首页 > 代码库 > WPF学习笔记(二)----Events, Commands

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

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对以下几个方面没有提供任何支持:

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

.“可撤销命令”

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

 

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