0

我有一个 WPF 项目,它根据 APP 的某些元素的位置在不同的应用程序“APP”上绘制窗口(如弹出窗口)。
这些窗口的位置是根据系统 DPI(又名主显示器的 DPI)计算的。
当我在显示设置中更改主 DPI 时,窗口的位置是使用“旧”主 DPI 计算的,这会导致位置错误。
是否有某种方法可以执行这些取决于主 DPI 的计算,使用“新”主 DPI 而不是旧的?

我知道在更改主要 DPI 时,Windows 会提醒我“某些应用程序在您关闭并重新打开它们之前不会响应缩放更改。”,但我需要找到解决方法。

谢谢

4

1 回答 1

1

您需要查看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;
}
于 2020-10-14T16:04:59.837 回答