与设备无关的单位(Device-independent unit)

WPF中,关于长宽和位置的单位(如Width,Height等)是很奇怪的,它不是普通的像素(pixel),这个单位被称为与设备无关的单位(Device-independent unit)或“设备无关像素”(device-independent pixel),“逻辑像素”(logical pixel),其实,这一个单位,也像素是一点关系都没有的。这个单位是WPF对度量的抽象,与设置无关的。因为未来显示设置可能很大,而使用pixel可以会有很大的变化或不太好度量。

WPF中长宽和位置
可以这样设置:
Width=96
Height=96
也可以这样设置:
Width=100*Math.PI;
Height=100*Math.E;
这都是可以的,设定这两个property时,可以使用整数,也可以使用双精度的浮点型,Width和Height在默认的情况下是没有定义的,它的值是NaN,相当于Not a Number,这个字符在VB6脚本中也会出现的。要取得窗口的尺寸,不可以使用Width和Height的属性,而可以改用下面两个只读的属性ActualWidth和ActualHeight。窗口创建时,这两个属性的值都可能是0,而只有在窗口出现在屏幕上时,这两个属性才会生效。
当Width和Height都设定得很小时,窗口至少也会出现标题的部分,这是因为窗口有最小尺寸的设置,SystemParameters.MinimumWindowWidth和
SystemParameters.MinimumWindowHeight这两个只读属性就是尺寸的最小的大小。

设置这个奇怪的单位
Width=96,它的单位是1/96英寸,实际上是设置Width为1英寸。那么,1英寸是显示多少像素呢?最终,还是要使用像素来度量的,显示器支持的是像素。可以这样查看:桌面右键-属性-设置-高级-常规-DPI设置,正常尺寸(96DPI)表示,每英寸96像素。如果你重新设置这个属性为120DPI,则是一英寸120像素,Width=96表示,120个像素。
这样,WPF中,长度和位置的单位与设置就没什么关系了,它经过计算系统对DPI的设置,最后可以转化为像素。

你可能感兴趣的:(与设备无关的单位(Device-independent unit))