WPF界面的架构

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

一、界面元素系统用来展示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接口完成属性更改通知功能。

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

时间: 2024-09-15 05:10:52

WPF界面的架构的相关文章

WPF界面设计的方法

WPF界面的简单设计方法是:先做出基本的布局,放好基本的控件,再美化.通过不同的层次来对界面进行良好的设计: 一.Presentation表示层:XAML文件,Windows,UserControls,CustomControls,ValueConverters,Resources:这一层是负责任的外观和感觉的应用程序.它包含了WPF的意见,用户控件,自定义控件和资源,样式,模板等.ValueConverters也很普遍,尤其是在这一层时,转换成WPF的一个对象,例如转换成ImageSource

WPF界面设计技巧(3)—实现不规则动画按钮

原文:WPF界面设计技巧(3)-实现不规则动画按钮    发布了定义WPF按钮的教程后,有朋友问能否实现不规则形状的按钮,今天我们就来讲一下不规则按钮的制作.   不规则按钮的做法实际上和先前我们做不规则窗体的方法差不多,只是为按钮弄个不是那么方方正正的背景而已.   我们这次沿用自定义窗体时的设计图形,设计一个动态的不规则按钮,在这个示例中我们要将先前设计的整个图形作为按钮,并让外围的圆环始终围绕中心圆形旋转,在鼠标移入时,还要产生颜色变化及发光效果.   首先用 Microsoft Expr

WPF界面设计技巧(2)—自定义漂亮的按钮样式

原文:WPF界面设计技巧(2)-自定义漂亮的按钮样式  上次做了个很酷的不规则窗体,这次我们来弄点好看的按钮出来,此次将采用纯代码来设计按钮样式,不需要 Microsoft Expression Design 辅助了.   首先打开 Microsoft Visual Studio 2008 ,新建一个WPF项目,在上面随便放几个按钮:     然后给各个按钮设置不同的背景颜色:     设置好之后就是这样啦:     然后我们就开始在 App.xaml 文件中定义按钮样式了:     定义的样式

WPF界面设计技巧(1)—不规则窗体图文指南

原文:WPF界面设计技巧(1)-不规则窗体图文指南  初到园子,奉上第一篇入门级教程,请勿见笑. 以往WinForm编程中,实现不规则窗体是有一定难度的,更难的是不规则窗体的边缘抗锯齿及局部透明处理.而现在,WPF的出现使这个问题迎刃而解,使得我们可以轻松.灵活地美化用户界面. 下面就让我们来看看如何实现一个不规则窗体: 首先我们需要借助Microsoft Expression Design 2来进行图形设计.(这里使用Photoshop等传统软件也可以,但是只能利用PNG格式来实现透明,其缺点

WPF界面设计技巧(11)-认知流文档 & 小议WPF的野心

原文:WPF界面设计技巧(11)-认知流文档 & 小议WPF的野心     流文档是WPF中的一种独特的文档承载格式,它的书写和呈现方式都很像HTML,它也几乎具备了HTML的绝大多数优势,并提供了更强的编程支持及对WPF其他元素的兼容.   直接来看代码吧,需要讲解的地方比较多,我就直接注释在代码里了,看起来更方便些:     Code<Window x:Class="流文档.Window1"     xmlns="http://schemas.microso

WPF界面设计技巧(10)-样式的继承

原文:WPF界面设计技巧(10)-样式的继承     PS:现在我的MailMail完工了,进入内测阶段了,终于可以腾出手来写写教程了哈,关于MailMail的介绍及内测程序索取:http://www.cnblogs.com/SkyD/archive/2008/08/09/1264083.html  欢迎帮我捉虫,以及与我交流WPF技术   WPF的样式的继承属性极少被文章提及,以至于我在编写MailMail期间为此踌躇数日,最后终于在E文版的MS社区得到指点才得以解惑.   现将其分享出来,这

WPF界面设计技巧(4)—自定义列表项样式

原文:WPF界面设计技巧(4)-自定义列表项样式   有前面修改按钮样式的基础,我们可以尝试来定制一个即好看又好用的 ListBox ,今天先来讲"好看"部分.   打开 Microsoft Visual Studio 2008 ,建立一个WPF应用程序,调整窗体大小,在窗体内创建一个 ListBox 和一个 Button ,按下图所示布局.   在  Window1.xaml 中为窗体 Loaded 事件及按钮 Click 事件添加事件处理:       Code<Window

WPF界面设计技巧(8)—自制山寨版CheckListBox

原文:WPF界面设计技巧(8)-自制山寨版CheckListBox    近年来IT市场山寨横行啊,我们今天也来发扬一下山寨精神,搞个自制的CheckListBox出来.   喏,CheckListBox 就是下面这玩意啦:       为什么要搞它?我们是山寨耶,说搞谁就搞谁!   我也不知道为什么,WPF里没有提供 CheckListBox 控件,但凭借WPF强大的外观定制能力,我们可以轻松的创制一个自己的 CheckListBox .   CheckListBox 的基本功能其实和 Lis

WPF界面设计技巧(7)—模拟电梯升降的缓动动画

原文:WPF界面设计技巧(7)-模拟电梯升降的缓动动画     如同Flash一样,WPF的亮点之一也在于其擅于表现平滑的动画效果,但以移动动画来说,仅凭简单的起始位置.目标位置,所产生的动画仍会非常生硬,这种动画忽略了移动开始时的加速过程与移动结束时的减速过程.   WPF在关键帧动画中提供了样条内插(Spline)型的关键帧,用以控制变化的速率曲线,但这东西实在有些复杂,且不够形象化,我研究很久也没明白如何实现"缓入--缓出"的效果,随后我从一本经典牛X却鲜有人知的过时的Flash