ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-01-27 21:04:10  阅读:278  来源: 互联网

标签:初始化 窗口 元素 发生 学习 第十五章 Loaded WPF 事件


  前两章学习了WPF事件的工作原理,现在分析一下在代码中可以处理的各类事件。尽管每个元素都提供了许多事件,但最重要的事件通常包括以下5类:

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

一、生命周期事件

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

表1-1 所有元素的生命周期事件

 

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

  当创建窗口时,会自下而上地初始化每个元素分支。这意味着,位于深层的嵌套元素在他们的容器之前被初始化。当引发初始化事件时,可确保元素树中当前元素以下的元素已经全部完成了初始化。但是,包含当前元素的元素可能还没有初始化,并且不能假定窗口的任何其他部分已经初始化。

  在每个元素都完成初始化后,还需要在他们的容器中进行布局、应用样式。如果需要的话,还会绑定到数据源。当引发窗口的Initialized事件后,就可以进入下一阶段了。

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

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

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

名    称 说    明
SourceInitialized 当取得窗口的HwndSource属性时(但在窗口可见之前)发生。HwndSource是窗口句柄,如果调用Win32 API中的遗留函数,就可能需要使用该句柄
ContentRendered 在窗口首次呈现后立即发生。对于执行任何可能会影响窗口可视外观的更改操作,这不是一个好位置,否则就会强制进行第二次呈现(改用Loaded事件)。然而,ContentRendered事件表明窗口已经完全可见,并且已经准备好接收输入
Activated 当用户切换到该窗口时发生(例如,从应用程序的其他窗口或从其他应用程序切换到该窗口)。当窗口第一次加载时也会引发Activated事件。从概念上讲,窗口的Activated事件相当于控件的GotFocus事件
Deactivated 当用户从该窗口切换到其他窗口时发生(例如,切换到应用程序的其他窗口或切换到其他应用程序)。当用户关闭窗口也会发生该事件,该事件在Closing事件之后,当在Closed事件之前发生。从概念上讲,窗口的Deactivated事件相当于控件的LostFocus事件
Closing 当关闭窗口时发生,不管用户关闭窗口还是用过代码调用Window.Close()或Application.Shutdown()方法关闭窗口。Closing事件提供了取消操作并保持打开状态的机会,具体通过将CancelEventArgs.Cancel属性设置为true实现该目标。但是,如果是因为用户关闭或注销计算机而导致应用程序被关闭,就不能接收到Closing事件.
Closed 当窗口已经关闭后发生。但是,此时仍可以访问元素对象,当然是在Unloaded事件尚未发生之前。在此,可以执行一些清理工作,项永久存储位置(如配置文件或Windwos注册表)写入设置信息等。

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

二、输入事件

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

 

 

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

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

标签:初始化,窗口,元素,发生,学习,第十五章,Loaded,WPF,事件
来源: https://www.cnblogs.com/Peter-Luo/p/12236807.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有