Windows Presentation Foundation
该技术是基于Windows的图形显示系统,在.NET Framework 3.0的时候发布,第一个版本叫WPF 3.0。
有两个突出的创新功能:内置硬件加速、分辨率无关
1.Windows的图形界面技术
远古时期,Windows应用程序所用的技术有两个
User32:Windows外观元素(窗口、按钮、文本框等)
GDI/GDI+:渲染绘制简单图形图像及文本,复杂程度高且通常情况下性能较差。
后来,微软推出了DirextX图形引擎。通过硬件加速,将渲染绘制图形等复杂的操作交给GPU。 WPF的所有绘图操作都是由DirectX完成的,同时WPF仍在部分特定服务中依赖于User32。
WPF的硬件加速:
WPF工作的过程中包含硬件优化方式和软件计算方式,优先采用硬件优化方式,在硬件性能不佳时,也会有软件计算的方式加入。
简单来说就是吃显卡配置,也有对低配硬件使用时的程序优化。
2.WPF高级API的优点
- 类Web的灵活布局方式
- 高可复用的样式和模版
- 不再逐像素绘制的高效文本和绘图,支持3D图形
- 不再用计时器的流畅动画
- 音/视频可以添加特效并灵活集成
- 可进行代码抽象的命令,将代码逻辑链接到多个控件上
- 声明式UI,可实现前后端分离
- 可C/S,也可B/S,可部署到浏览器中使用
3.分辨率无关性
WPF根据系统dpi进行缩放,与物理显示设备无关。
dpi-dot per inch 每英寸像素点数
4.WPF体系结构
应用程序工作时的层次结构
PresentationFramework.dll | 托管的WPF API--顶层 |
PresentationCore.dll | |
WindowsBase.dll | |
milcore.dll | 媒体集成层 Media Integration Layer,MIL |
WindowsCodecs.dll | |
Direct3D | 低级底层API |
User32 |
类层次结构
WPF的核心命名空间都是以System.Windows开头的,System.Windows.Forms例外(属于Winform)
System.Threading.DispatcherObject
WPF是单线程亲和模型(STA Single-Thread Affinity),单线程拥有且不可与其他线程交互,由协调消息(键盘鼠标操作或框架和布局的处理)的调度程序管理。
继承自此类,可以保证代码在正确的线程运行且能通过访问调度程序为用户界面线程封送代码。
System.Windows.DependencyObject
依赖项属性,屏幕上元素交互的途径,支持更改通知、默认值继承、减少属性存储空间等
System.Windows.Media.Visual
页面显示的所有元素都继承自此类,封装了绘图指令,在WPF托管库和milcore.dll之间提供了链接。如果要更简,可以直接对Visual对象进行编程。
System.Windows.UIElement
提供对布局、输入、焦点和事件的支持,鼠标和按键的操作在这里被转换成路由事件。
System.Windows.FrameworkElement
WPF核心继承树的最后一站,实现了一些全部由UIElement类定义的成员。提供了布局的基础,如HorizontalAlignment、Margin等,还有数据绑定、动画、样式等一系列内容。
System.Windows.Shapes.Shape
基本形状类,子类有Rectangle、Polygon等
System.Windows.Controls.Control
可进行交互的元素,包括但不限于Button、TextBox等。为设置字体和前景色、背景色提供了附加属性,支持模板-用以自定义绘图替换标准外观。
System.Windows.Controls.ContentControl
所有具有单一内容的控件的基类
System.Windows.Controls.ItemsControl
所有显示选项集合的控件的基类。如ListBox、TreeView等
列表控件们的爹。
System.Windows.Controls.Panel
所有布局容器的基类,是布局系统的基础。