ModernUI教程:独立显示器DPI感知
独立显示器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设置。
DpiAwareWindow
DpiInformation属性
公开当前的DPI settings.DpiChanged事件和OnDpiChanged方法
当屏幕上的DPI 设置发生改变时被渲染。重写OnDpiChanged或处理DpiChanged事件来监视DPI的变化。例如你可以载入高/低DPI图像资源。ModernUIHelper
包含辅助方法用于获取和设置当前进程的DPI感知。
GetDpiAwereness方法
查询当前进程的DPI挂不照顾。返回DpiUnaware,SystemDpiAware或PerMonitorDpiAware
TrySetPerMonitorDpiAware方法
试图设置DPI感知为PerMonitorDpiAware。当主机操作系统不支持PerMonitorDpiAware时,将采用SystemDpiAware。进程中最初的DPI感知必须成功设置为DpiUnaware。任何失败的操作都会被丢弃,返回值标识操作是否成功。
该方法由DpiAwareWindow内部使用,不需要显式地调用这个方法。
ModernUI的独立显示器DPI感知的实现很大程度上是基于MSDN上的文章:开发一个Per-Monitor DPI-Aware WPF应用程序。
传送门:ModernUI教程:目录
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 一个费力不讨好的项目,让我损失了近一半的绩效!
2012-04-10 [译]Pro ASP.NET MVC 3 Framework 3rd Edition (Chapter 20 JQuery) 0.引言