仅当应用程序在 SystemAware 或 PerMonitorV2 模式下运行时,并且监视器具有与设计应用的计算机不同的自定义 DPI 设置时,通常才需要缩放。 在这些场景中,Windows 窗体运行时会根据监视器的自定义 DPI 设置计算缩放因子,并用新的缩放因子调用 ScaleControl(SizeF, BoundsSpecified)。 为了提高性能, ScaleControl
现在仅当计算刻度系数不是 1.0F(即需要缩放)时才调用。 如果更改会重写 ScaleControl
并在重写中执行任何自定义操作,此更改可能会使应用中断。
已引入的版本
.NET 6 服务 6.0.101
旧行为
在 .NET 6 GA 版本及更早的版本中,每次在应用程序的容器控件上调用ScaleControl(SizeF, BoundsSpecified)时,都会调用虚拟公共 APIPerformAutoScale()。 也就是说,每次有布局或字体更改时都会调用该方法,而不考虑是否需要缩放。
新行为
从 .NET 6 服务版本开始, ScaleControl(SizeF, BoundsSpecified) 仅在需要缩放窗体或控件时调用。 Windows 窗体运行时根据监视器的自定义 DPI 设置,以及应用程序设计所在监视器的 DPI 设置,计算出缩放比例。 ScaleControl(SizeF, BoundsSpecified) 仅当缩放因子指示需要缩放时,才调用 。
更改类别
此更改会影响 源兼容性。
更改原因
进行了此更改以提高性能并避免不必要的布局。
建议的措施
检查代码在这些可重写的方法中是否执行任何自定义的非缩放操作。