我有一个 WPF 项目,它根据 APP 的某些元素的位置在不同的应用程序“APP”上绘制窗口(如弹出窗口)。
这些窗口的位置是根据系统 DPI(也称为主显示器的 DPI)计算的。
当我更改显示设置中的主 DPI 时,窗口的位置是使用“旧”主 DPI 计算的,这会导致位置错误。
是否有某种方法可以使用“新”主 DPI 而不是使用旧 DPI 来执行这些取决于主 DPI 的计算?
我知道在更改主 DPI 时,Windows 会提醒我“某些应用程序不会响应缩放更改,直到您关闭并重新打开它们。”,但我需要找到解决方法。
谢谢
您需要查看 SystemEvents.DisplaySettingsChanged 事件,并编写一个在该事件发生时处理该事件的方法。我之前在 WPF 中做过这个,所以我知道它是有效的。
然后,使用 Ana Betts 的答案 来计算主要 DPI:
PresentationSource source = PresentationSource.FromVisual(this);
double dpiX, dpiY;
if (source != null) {
dpiX = 96.0 * source.CompositionTarget.TransformToDevice.M11;
dpiY = 96.0 * source.CompositionTarget.TransformToDevice.M22;
}
我可以修复,我的邮箱:[email protected]