1.WPF体系结构

WPF学习目录

1.WPF体系结构

WPF的主要组件
WPF的主要组件

image

PresentationFramework:包含WPF顶层的类型,包括那些表示窗口、面板以及其他类型控件色类型。实现了高层编程抽象,如样式。

PresentationCore:包含了基础类型,如UIElement类和Visual类,所有形状类和控制类都继承自这两个类。如果不需要窗口和控件抽象层的全部特征,可使用这一层,而且还能够利用WPF的渲染引擎。

WindowsBase:包含了更多的基本要素,这些要素具有在WPF之外重用的潜能,如 DispatcherObject类和DependencyObject类,这两个类引入了依赖项属性。

milcore:WPF 渲染系统的核心,也是媒体集成层(Media Integration Layer, MIL) 的基础。 其合成引擎将可视化元素转换为 Direct3D 所期望的三角形和纹理。 尽管将 milcore.dll 视为 WPF 的一部分, 但它也是 Windows Vista 和 Windows 7 的核心系统组件之一。 实际上, 桌面窗口管理器(Desktop Window Manager, DWM)使用 milcore.dll渲染桌面。

WindowsCodecs:一套提供图像支持的低级 API(例如处理、 显示以及缩放位图和 JPEG 图像)。

Direct3D:一套低级 APL WPF 应用程序中的所有图形都由它进行渲染。

User32 :用于决定哪些程序实际占有桌面的哪一部分。 所以它仍被包含在 WPF 中, 但不再负责渲染通用控件。

`milcore.dll`有时称为 "托管图形” 引擎。
与公共语言运行库(CLR)管理NET应用程序的生命期非常类似,milcore.dll管理显示状态 。

而且正如有了CLR, 开发人员不再为释放对象和回收内存而感到烦恼一样, milcore.dll让开发人员不必再考虑使窗口无效和重绘窗口。

只需使用希望显示的内容创建对象即可,当拖动窗口、窗口被覆盖和显露、最小化窗口和还原窗口时,由而lcore.dll负责绘制窗口的恰当部分。

image

1.1 元素系统

元素系统是WPF中开发人员进行交互的表层部分。包含在元素系统内部的是构成用户界面的核心内容,如样式、布局、控件、绑定及文本布局等。

在元素系统中,几乎所有的组件都继承自最重要的System.Windows.FrameworkElement 类。
该类提供了与 WPF 核心呈现服务进行交互所需要的基本功能,而且该类使其父类 System.Wmdows.UlElement 的主要成员的功能得以实现,而System.Windows.UIEleroent 类提供了WPF可视化元素的布局、事件处理与输入等功能。
UIElement类与Win32中的HWND类似,它是WPF继承层次中具体输入功能的起点。

1.1.2 元素树

元素树表示一个WPF应用程序所包含的可视化元素。在WPF应用程序中存在两棵元素树:逻辑树和可视化树。

逻辑树包含WPF应用程序具体元素的层次结构,它可以用XAML文件来进行声明式定义,或是由代码进行命令式定义。例如以下代码片断:

<Window x:Class="Config.MainWindow">
    <StackPanel Name="stackpanel">
        <Label Name="label" Text="label"/>
        <Button Content="cancel" Click="Cancel_Click"/>
        <TextBox Text="aaaa"/>
    </StackPanel>
</Window>

===>逻辑树为:
image

可视化树:

针对逻辑树中的每一个元素, 可能需要创建附加元素来完成该元素的可视化显示。 为实现可视化,可视化树支持应用程序元素的组合与可视化元素的创建。
image

1.2 可视化系统

通过可视化子系统,应用程序可以访问WPF提供的核心呈现服务。

该子系统检查应用程序内的所有组件(标签、按钮、文本、二维与三维图形、动画),并负责和底层的组织系统进行通信,以在屏幕上生成渲染结果。

尽管可视化系统是WPF体系结构中的一个关键部分,但大量的关键工作还是由底层的组织系统来完成的。

1.3 文字系统

在WPF中字体系统完全进行了重新改写,以提供比原来的Windows字体系统更好的字体与文本引擎。目前Windows中有两个字体引平,即GDI与Uniscribe,这两个字体引擎都具有明显的缺陷,而不适用于WPF。

新的字体系统为创建和缓存WPF中的字体信息提供了统的机制,包括TrueType与 Adobe OpenType字体。构成特定字体的度量、符号与路径由字体系统进行计算、缓存并使其适用于WPF。这个处理是很耗费时间的,WPF通过使用缓存技术来提升文本布局与渲染的质摆。

1.4 输入/事件系统

(1)用户单击鼠标。
(2)User32接收设备输入消息。
(3)WPF接收原始消息,并将其转换为一个输入报告(一个设备输入信息的WPF封装包)。
(4)应用程序识别来自WPF的输入报告类型,并执行结构和儿何命中测试,以确定单击目标。
(5)检查完单击目标之后,输入报告被转换成一个或多个事件。对于每个被发现的事件,根据命中区域的组成,创建一条事件传递路线。
(6) 输入/事件系统引发每个被发现的串件。

1.5 属性系统

属性系统是WPF中与核心数据相关的功能的整体。它由以下三个主要组件构成:

  • 改变通知
  • 存储
  • 表达式

改变通知系统是WPF中的一个基础内容。WPF中的所有数据都通过属性来描述,所以通过WPF应用程序中的元素进行的所有交互都将反映到属性的改变上。

改变通知通过实现System.ComponentModel.INotifyPropertyChanged接口来获得。 该接口只定义了一个成员一PropertyChanged事件。当执行类的一个属性发生改变之后, 该事件将会通知监听程序。

附属属性(dependency properties)表示在WPF属性系统中注册的属性,可以实现屈性值的表达、样式、数据绑定、改变通知以及其他功能。

1.6 消息传递系统

消息传递服务是WPF体系结构中的关键组件, 它将可视化系统和组织系统连接在一起。 前面提到过,可视化系统提供了个管理接口, 通过该接口为WPF 的其他托管子系统提供指令,以确定哪些元素需要在屏幕上显示。

尽管可视化系统提供了这样一种途径,但是它不能单独完成这项工作, 而是将这项任务移交给组织系统。

消息传递系统在可视化系统和组织系统之间提供了通信通道。

1.7 组织系统

组织系统为WPF体系结构提供了内部的执行机制。 组织系统是 一个非托管的子系统, 它接收来自托管的可视化系统的指令, 并将这些指令转化为在屏幕上显示的图形。

组织系统为WPF应用程序中众多的显示元素提供了可视化功能。

WPF学习目录

posted @ 2021-07-04 14:06  x_amos  阅读(632)  评论(0编辑  收藏  举报