独立显示器DPI感知,是在Windows 8.1中新增的特性,这个特性针对拥有多个显示器同时各个显示器的DPI设定又不同的人。对这个新特性做了优化支持的软件能够在一个高DPI的显示器移动窗口到另一个低DPI的显示器的时候实现完美自适应,反之亦然,自动适应对应的显示器的DPI。而对于不支持这个新特性的软件,哪怕是已经针对DPI调整做了优化的软件,系统都会利用DPI虚拟化来对软件界面进行像素拉伸放大或缩小(实际上放大与缩小采取了2种不同的方式,具体我就不说了),从而适应不同显示器的DPI。
支持:
在Windows 8.1之前,独立显示器DPI感知并不存在,操作系统提供了一个系统DPI,WPF自动支持。
在1.0.6版本以后,当操作系统支持时,Modern UI将会自动启用独立显示器DPI感知功能。新基类DpiAwareWindow实现了所有扩展到当前显示器DPI设置所必需的功能。ModernWindow和ModernDialog都派生自DpiAwareWindow。
要求:
ModernUI应用程序支持独立显示器DPI感知有两个要求:
1、显然主机操作系统必须是Windows 8.1或更高版本。如果ModernUI应用程序运行的操作系统不支持独立显示器DPI感知,它就会自动转切换到SystemDPI感知,这是WPF的默认设置。
2、为了在进程中启用PerMonitorDpiAwareness,它必须被初始化为DPI unaware。这可以通过在你的应用程序中添加以下代码到AssemblyInfo.cs来实现:
DPI API:
ModernUI公开的API可以用来查询当前的DPI设置。
ModernUI的独立显示器DPI感知的实现很大程度上是基于MSDN上的文章:开发一个Per-Monitor DPI-Aware WPF应用程序。
传送门:ModernUI教程:目录