1、关于WPF 单位
WPF 为了保持应用程序窗口,在不同分辨率的显示器上,始终保持基本相同的布局;WPF所有元素都是使用与设备无关的单位(DIU)进行度量。由于UI设计师的显示器和开发人员的显示器的分辨率不经常是一致的,并且UI设计师,通常采用的是用“像素”来度量尺寸;所以需要进行转换;
2、关于分辨率的几个概念
在了解转换方法前,首先应了解几个基本概念
1)物理显示器DPI
根据显示器的分辨率计算
2)系统DPI设置
Windows10,可以在显示设置中进行缩放设置;进行缩放设置后,系统DPI设置与物理显示器的DPI值就不一样了。 注意:WPF也是根据系统DPI设置进行缩放的。
3)设备无关单位(DIU)
一个与设备无关的单位被定义为1/96英寸。
设想用WPF创建一个尺寸为96x96单位的小按钮,如果使用标准的window DPI设置(96dpi),每个设备无关单位实际上对应一个物理像素。因为对于这种情况,WPF用以下公式进行计算
如果最大分辨率为1600x1200像素的19英寸LCD显示器,在没有进行缩放的情况下,可以用勾股定理算出这个显示器的像素密度,如下所示
UI设计输出的DPI
通过是根据一定尺寸的设计的,如1920*1080;假设是根据21寸显示设计的, 则根据上述公式,1DIU=1.06Pix;
那么UI设计的元素尺寸转换方法:
UI 尺寸(Pix)/ 开发工程师设备DIU物理位 = 元素DIU尺寸
换句话说,将系统DPI设为120dpi时,WPF渲染引擎假定设备无关的单位等于1.25个像素。如果显示器96x96DIU 大小的按钮,那么物理尺寸实际为120x120像素(因为96x1.25=120)。—在标准显示器上的大小为1英寸的按钮,在像素密度更高的显示器上仍然保持1英寸的大小。
如果只用于按钮,这种自动缩放的意义不大。但WPF对它所显示的任何内容都是用设备无关单位,包括形状,控件,文本以及其他放在窗口中的内容。所以可将系统DPI改为任何所希望的数值,WPF将无缝地调整应用的尺寸。
需要注意的是,默认情况下,WPF的处理方式并非简单地将度量尺寸舍入为最接近的像素。如果像素的一条边落在连个像素之间,WPF将使用反锯齿特性将这条边混合到相邻的像素。这看起来可能是多余的选择,但是确实能改进视觉效果。