WPF界面的架构

来源:互联网 发布:轩辕剑7 知乎 编辑:程序博客网 时间:2024/05/16 15:47

界面元素系统所描述的界面外观实际上是由视觉系统和文字系统所确定的,而输入系统以及属性系统的各运行逻辑的触发则是由用户在界面元素上的操作行为导致的。

一、界面元素系统用来展示WPF创建的向用户提供交互功能的程序界面。该系统中包含了对用户界面的具体定义,如样式、布局、对齐方式、控件、绑定等。在该系统中的各个类实例基本上都是FrameworkElement类的派生类,而该类提供了许多基本功能,并通过重载等方式完成了对自身功能的定义。在界面元素系统中,重要的概念是元素树(Element Tree)。它用来表示用户界面中各元素之间的关系。元素树一共有两种类型:逻辑树(Logical Tree)和视觉树(Visual Tree)。逻辑树是在XAML或后台代码(如C#)中定义的各个界面元素之间的层次结构关系,它的结构与XAML文件中各元素的包含结构完全相同。视觉元素与XAML中声明的各个界面元素并不是完全对应的,该结构是用来表现视觉元素的树状结构的,逻辑树中的各个节点常常存在于视觉树中,这是因为界面元素常常是由多个视觉元素构成的。

二、视觉系统实际上是界面元素系统与消息交换层以及功能实现部分的中间层,只有通过该系统,界面元素中定义的各个功能才能真正执行。当一个消息到来的时候,该系统将通过功能实现层完成对界面元素的绘制。WPF中的文字系统是一个由WPF自己控制进行绘制的系统,而不再是对Windows自带文字系统的包装。在WPF使用矢量作为图像系统的前提下,每次对文字显示效果的计算结果将得到保存并在下一次对相同文字进行绘制时使用。对于渲染线程的存在以及渲染功能的实际实现,WPF内部是通过DirectX在单一线程中对界面进行绘制的,从界面元素表示到DirectX可接受输入的转化过程以及DirectX对各种效果的原生支持这两方面考虑,在DirectX没有将2D绘制和3D绘制系统合并之前,DirectX对2D图形的绘制主要是由基于点阵图像的DirectDraw完成的, WPF的矢量特性证明其内部实现接受的将是表示三角片元的矢量数据。

三、WPF所提供的输入系统提供了较原有的Win32消息系统的更多的输入类型支持,同时WPF本身也可以侦听手写输入及其他类型的输入消息。与WPF的输入系统密切相关的是路由事件,路由事件分为直接路由、向上路由和向下路由三种。其中直接路由就是在单一界面元素中触发却不被传递的消息执行行为,而向上和向下则表示在界面元素拓扑关系中的自内向外和自外向内的传递方式。按照消息级别来分,WPF中的输入消息分成两种:底层输入消息和高级输入消息。其中底层输入消息常常与用户的动作对应,例如WPF表示用户对按键敲击的事件是KeyDown。由于这些动作需要被更高层次的元素知晓,因此它是一个路由事件。而对于具有特定功能的控件,由于其功能的特殊性,常常引入一些具有特定功能的事件并对原有事件实行屏蔽。

四、属性系统是WPF中除视觉系统以外最重要的系统。该系统主要由三部分实现组成:更改通知、存储功能和表达式。更改通知是属性系统的最基本、最重要的功能。由于WPF主要通过属性驱动完成对界面效果的控制,因此WPF中的各种数据都尽量以属性的形式存在。对这些属性的更改常常驱动内部更新逻辑对其他数据进行相关的更改,因此WPF可以通过INotifyPropertyChanged接口完成属性更改通知功能。

五、消息交换层所完成的功能就是在视觉系统和功能实现部分传递信息,使视觉系统和功能有机地结合在一起。通过一个协议来提供了一个信息传递的通道,以在结构上使得视觉系统与功能实现相分离。该协议可以适用于网络,以使得程序逻辑可以在远程系统中执行,而将图像渲染工作留在本地完成。这样做可以非常有效地减少远程系统的数据传输量。