如何解决处理主要DPI的更改而无需重新启动应用程序
我有一个WPF项目,该项目根据APP的某些位置在不同的APP“ APP”上绘制窗口(如弹出窗口)。
这些窗口的位置是根据系统DPI(又称为主监视器的DPI)计算的。
当我在显示设置中更改主要DPI时,使用“旧”主要DPI计算窗口的位置,这会导致位置错误。
是否有某种方法可以执行这些计算,这些计算取决于主要DPI,使用“新”主要DPI而不是使用旧DPI?
我知道,当更改主要DPI时,Windows会警告我“某些应用程序只有在关闭并重新打开它们之后才能响应缩放更改。”,但我需要找到解决方法。
谢谢
解决方法
您将要研究SystemEvents.DisplaySettingsChanged事件,并编写一个在事件发生时处理该事件的方法。我之前在WPF中已经做到了,所以我知道它可以工作。
然后,使用the answer here by 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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。