第一章 WPF概述
1.3 分辨率无关性
1.3.1 WPF单位
WPF串口以及其中的所有元素都使用设备无关单位进行度量。一个设备无关单位被定义为1/96英寸。
设想使用WPF创建一个尺寸为96×96单位的小按钮,使用标准的Windows DPI设置(96dpi),每个设备无关单位实际上对应一个物理像素。因为对于这种情况,WPF使用以下公式进行计算:
\left[物理单位尺寸\right]=\left[设备无关单位尺寸\right]\times \left[系统DPI\right]\\
=1/96英寸 \times 96dpi\\
=1像素
=1/96英寸 \times 96dpi\\
=1像素
本质上,WPF假定使用96个像素构成1英寸,因为这是Windows操作系统通过系统DPI设置告诉WPF的,但是,实际上依赖于显示设备。
例如,考虑一个最大分辨率为1600像素\times1200像素的19英寸LCD显示器。使用勾股定理可以计算出这个显示器的像素密度:
\left[屏幕DPI\right] = \frac{\sqrt{1600^2+1200^2}像素}{19英寸}\\
=100dpi
=100dpi
在这种情况下,像素密度达到100dpi,比windows假定的数值稍高。因此在这个显示器上,一个96×96像素的按钮将稍小于1英寸。
1.3.2 系统DPI
WPF本身就支持系统DPI设置。假如,如果将系统DPI设置改为120dpi(高分辨率显示器的用户通常选择这么做),WPF假定它需要120个像素来填满1英寸空间。WPF使用以下公式计算如何将逻辑单位变换为物理设备像素:
\left[物理单位尺寸\right] = \left[设备无关单位尺寸\right]\times \left[系统DPI\right]\\
=1/96英寸 \times 120dpi \\
=1.25像素
=1/96英寸 \times 120dpi \\
=1.25像素
换句话说,将系统DPI设置为120dpi时,WPF渲染引擎假定一个设备无关单位等于1.25像素。如果现实一个96×96大小的按钮,物理尺寸实际为120像素X120像素(因为96×1.25=120)。这正是所期望的结果——一个在标准显示器上大小为1英寸的按钮,在像素密度更高的显示器上仍然保持1英寸大小。
1.4 WPF体系结构
- PresentationFramework.dll包含了WPF顶层的类型,包括那些表示窗口、面板以及其他类型控件的类型。它还实现了高层抽象编程,如样式。
- PresentationCore.dll包含了基础类型,如UIElement类和Visual类,所有形状类和控件类都继承自这两个类
- WindowsBase.dll包含了更多基本要素,这些要素具有在WPF之外重用的潜能,如DispatcherObject类和DependencyObject类,这两个类引入了依赖项属性
- milcore.dll是WPF渲染系统的核心,也是媒体集成层的基础
- WindowsCodecs.dll 是一套提供图像支持的低级API(例如,处理和显示以及缩放位图与JPEG图像)