WPF
的分辨率无关性
传统的 程序都有一个假设的最优分辨率在我们开发程序的时候总是假设一个最佳的屏幕分辨率
比如说 所有的 都在这个分辨率下调整好然后再针对更高的分辨率或者更低分辨率做一些处理
使得 在这些情况下不至于太难看
问题的关键在于传统的 程序的 是不可伸缩的这样 在高分辨率下显示程序的 就看起来就
会比较小而在底分辨率的时候程序就会显得很大老式的显示器一般都是 每英寸 个像素而现在新
出的显示器一般都支持 或者 的高分辨率在高分辨率下每英寸的像素点更密集这样 上的
内容就都挤在一起了难以阅读
理想的情况是当分辨率较高的时候利用这种能力来多显示一些内容以 为例我们希望
上的按钮无论在哪种分辨率下都一样大而当分辨率较高的时候能够显示更好的按钮图形这在传统的
程序是不可能的因为 !和 "# 没有提供这种能力
$ 没有这种和分辨率有关的问题因为 $ 自己绘制所有的图形而不依赖于 !所以如果你的
按钮在你的显示器上显示为 英寸宽那么换到一台分辨率更高的显示器上它还是 英寸宽只不过 $ 会将
它渲染的更加细致
总体上来说就是这样要更深入地理解这一点就需要研究一下 这个参数首先$ 使用的是系统
DPI 设置而不是硬件的 DPI 能力这样做是比较合理的毕竟当你的程序在一台巨大显示屏上显示的时候你肯
定希望你的程序是巨大的而在一台普通的笔记本上运行的时候就需要显示成适合笔记本屏幕的大小
那么 $ 是怎么确定我们的程序到底应该显示成多大才合适呢%我们深入地看一下 $ 的测量系统&
WPF 单位
$ 窗口内的所有元素都以设备无关单位来计量每一个设备无关单位的大小是一英寸的 我们来看
下面的公式&
物理单位尺寸=设备无关单位尺寸*系统 DPI 设置
假设你做了一个 ' 的按钮那么在一个标准的屏幕 为 上的大小是&
物理单位尺寸( )*'(+,"
那么我们的按钮占有多少个像素呢%毫无疑问是 ' 像素那么 像素是多大呢%既然你的 是
那么很容易就知道那就是 )*
现在假设系统的 设置为 那么这个按钮是多大呢%我们首先来计算针对这个屏幕$ 所使用
的物理单位尺寸&
物理单位尺寸( )*'(-+,"
也就是说 我们在 $ 里面所指定的那个尺寸在这个屏幕上的单位是 -.+,"那么 个单位的按钮
这次占有多少个像素呢%-+,"'(+,"你看同样的按钮现在显示成 个像素了 个像素
有多大%由于 是 很显然这个尺寸就是 )*怎么样%DPI 为 120 的时候和 DPI 为 96 的时候,物
理尺寸是一样的.
评论6