一、WPF概述
WPF(Windows Presentation Foundation)是用于Windows的现代图形显示系统。与之前的技术相比,WPF的创新功能在于:内置硬件加速和分辨率无关。
WPF是针对Windows版本的唯一富桌面应用程序。它的唯一局限性在于必须对Visual Studio 进行配置,将.NET Framework 4.0作为目标。
1. 创新功能
1) 内置硬件加速
WPF问世之前,每个传统的Windows应用程序都依靠User32和GDI/GDI+两个部分来创建用户界面。
在DirectX发布之后,随着DirectX趋于成熟。WPF应用程序在底层都是使用DirectX。DirectX在渲染图形时会将尽可能多的工作递交给图形处理单元(GPU)去处理,GPU是显卡专用的处理器。对于特定的服务,仍然需要User32(如处理和路由输入信息以及区分哪个应用程序实际拥有屏幕的哪一部分),但所有绘图操作都是由DirectX完成的。
WPF的智能程度很高,会尽量采用硬件优化方式,但如有必要时,会采用软件计算方式来完成同样的工作。
注意:DirectX能理解可由显卡直接渲染的高层元素。
WPF包含了一套面向程序编程人员的高级服务。
2) 分辨率无关
传统的Windows应用程序都会受特定的假定屏幕分辨率的限制。高分辨率的显示器会使应用程序窗口变小。
而对于WPF来说,只是用了更多的像素进行渲染,尺寸并没有发生变化。原因在于WPF根据系统DPI设置进行缩放,并不根据物理显示设备的DPI进行缩放。
WPF窗口以及其中的所有元素都使用与设备无关的单位进行度量。一个与设备无关的单位被定义为1/96英寸。
WPF对它所有显示的元素都使用设备无关单位。所以可将系统DPI改为任何所希望的数值。调整系统DPI的步骤取决于操作系统。
2. WPF体系结构
WPF使用多层体系结构。在顶层,应用程序与完全有托管C#代码编写的一组高层服务进行交互。至于将.NET对象转换为Direct3D纹理和三角形的实际工作,是在后台由一个名为milcore.dll的低级非托管组件完成的。milcore.dll是使用非托管代码实现的。因为他需要和Direct3D紧密集成,并且它对性能极其敏感。
WPF体系结构的示意图如下图所示。
图1-1WPF体系结构示意图
WPF基本控件集合的类的层次结构示意图如下图所示。
图1—2WPF基本控件集合的类层次结构
WPF的主要类有以下几种:
1.System.Threading.DispatcherObject类 此类即表示单线程亲和模型,这意味着用户界面由单个线程拥有。
2.System.Windows.DependencyObject类 依赖项属性特性
3.System.Windows.Media.Visual类 可将Visual视为绘图对象
4.System.Windows.UIElement类
5.System.Windows.FrameworkElement类 该类实现了一些全部由UIElement类定义的成员。
6.System.Windows.Shapes.Shape类 基本形状类
7.System.Windows.Controls.Control类 控件类
8.System.Windows.Controls.ContentControl类 具有单一内容控件的基类
9.System.Windows.Controls.ItemsControl类 所有显示选项集合的控件的基类
10. System.Windows.Controls.Panel类 所有布局容器的基类