【发布时间】:2015-04-03 19:25:27
【问题描述】:
我需要为连接到计算机的每个屏幕(即使是那些没有打开 WPF 窗口的屏幕)设置从控制面板 > 显示中设置的 DPI 比例。我见过许多获取 DPI 的方法(例如,http://dzimchuk.net/post/Best-way-to-get-DPI-value-in-WPF),但这些方法似乎依赖于Graphics.FromHwnd(IntPtr.Zero) 或PresentationSource.FromVisual(visual).CompositionTarget.TransformToDevice。
有没有办法为每个单独的屏幕获取 DPI 设置?
背景 - 我正在创建一个布局配置编辑器,以便用户可以在启动之前设置他们的配置。为此,我相对于彼此绘制每个屏幕。对于一种配置,我们使用的 4K 显示器具有大于默认 DPI 比例集。它的绘制比它相对于其他屏幕的实际显示要小得多,因为它报告的分辨率与其他屏幕相同。
【问题讨论】:
-
你可以在每个屏幕上创建一个虚拟窗口并以这种方式获取信息吗?
-
您可以使用之前的评论,否则您将不得不枚举显示设备并以这种方式获取 DPI。
-
Windows 现在支持每屏 DPI,从 8.1 开始。您可能会在一个安装了昂贵的“视网膜”显示器和另一个普通的显示器(通常是投影仪)的设置中遇到它。 WPF 的后台程序is here.
-
@GabrielNegut - 是的,我相信这也可以。但是,我一直在寻找一种更加程序化的解决方案,这样我就可以构建一个数据绑定转换器,而不是创建窗口并等待它们加载,然后再开始绘图。
-
@HansPassant - 是的,这就是我要解决的问题。在我的示例中,具有不同 DPI 的屏幕导致它们相互之间绘制不正确,因为 Screen.Bounds 表示 DPI 调整后的像素大小。