【WPF学习】第十五章 WPF事件

  前两章学习了WPF事件的工做原理,如今分析一下在代码中能够处理的各种事件。尽管每一个元素都提供了许多事件,但最重要的事件一般包括如下5类:布局

  •   生命周期事件:在元素被初始化、加载或卸载时发生这些事件。
  •   鼠标事件:这些事件是鼠标动做的结果。
  •   键盘事件:这些事件是键盘动做(如按下键盘上的键)的结果。
  •   手写笔事件:这些事件是使用相似钢笔的手写笔的结果。在平板电脑上用手写笔代替鼠标。
  •   多点触控事件:这些事件是一根或多根手指在多点触控屏上触摸的结果。尽在Windows7中支持这些事件。

1、生命周期事件学习

  当首次建立以及释放全部元素时都会引起事件,可以使用这些事件初始化窗口。表1-1列出了这些事件,他们是在FrameworkElement类中定义的。对象

表1-1 全部元素的生命周期事件blog

   为了弄清Initialized事件和Loaded事件之间的关系,分析一下呈现过程是有帮助的。FrameworkElement类实现了ISupportInitialize接口,该接口提供了两个用于控制初始化过程的方法。第一个方法是BeginInit(),在实例化元素后当即调用该方法。调用BeginInit()方法后,XAML解析器设置全部元素的属性(并添加内容)。第二个方法是EndInit(),完成初始化后,将调用该方法,此时引起Initialized事件。继承

  当建立窗口时,会自下而上地初始化每一个元素分支。这意味着,位于深层的嵌套元素在他们的容器以前被初始化。当引起初始化事件时,可确保元素树中当前元素如下的元素已经所有完成了初始化。可是,包含当前元素的元素可能尚未初始化,而且不能假定窗口的任何其余部分已经初始化。接口

  在每一个元素都完成初始化后,还须要在他们的容器中进行布局、应用样式。若是须要的话,还会绑定到数据源。当引起窗口的Initialized事件后,就能够进入下一阶段了。生命周期

  一旦完成初始化过程,就会引起Loaded事件。Loaded事件和Initialized事件的发生过程相反——换句话说,包含其余全部元素的窗口首先引起Loaded事件,而后才是更深层的嵌套元素。为全部元素都引起了Loaded事件后,窗口就变得可见了,而且元素都已被呈现。事件

  窗口还有它本身更特殊的生命周期事件,表1-2列出了这些事件。it

表1-2 Windows类的生命周期事件容器

   若是只对执行控件的第一次初始化感兴趣,完成这项任务的最好时机是在触发Loaded事件时。一般可在同一位置进行全部初始化,这个位置通常是Window.Load事件的事件处理程序。

2、输入事件

  输入事件是当用户使用某些种类的外设硬件进行交互时发生的事件,例如鼠标、键盘、手写笔或多点触控屏。输入事件可经过继承自InputEventArgs的自定义事件参数类传递额外的信息。以下图所示,显示了继承层次。

图 输入事件的EventArgs类


  InputEventArgs类只增长了两个属性:Timestamp和Device。Timestamp属性提供了一个整数,指示事件什么时候发生的毫秒数(它所表明的实际事件并不重要,但可比较不一样的时间戳值以肯定哪一个事件先发生。事件戳值大的事件是在更近发生的)。Device属性返回一个对象,该对象提供与触发事件的设备相关的更多信息,设备能够是鼠标、键盘或手写笔。这三种可能的设备由不一样的类表示,全部这些类都继承自抽象类System.Windows.Input.InputDevice.

  接下来章节将进一步分析在WPF应用程序中如何处理鼠标、键盘以及多点触控动做。

相关文章
相关标签/搜索