仅在需要时调用 ScaleControl

通常,只有当应用程序在 SystemAwarePerMonitorV2 模式下运行并且监视器具有自定义 DPI 设置(不同于设计应用的计算机中的设置)时,才会需要缩放。 在这些情况下,Windows 窗体运行时会根据监视器的自定义 DPI 设置计算缩放因子,并使用新的缩放因子调用 ScaleControl(SizeF, BoundsSpecified)。 为了提高性能,现在仅在计算出的缩放因子不为 1.0F 时调用 ScaleControl(即需要缩放)。 如果更改会重写 ScaleControl 并在重写中执行任何自定义操作,此更改可能会使应用中断。

引入的版本

.NET 6 服务 6.0.101

旧行为

在 .NET 6 GA 版本和早期版本中,每次针对应用程序的容器控件调用 PerformAutoScale() 时,都会调用虚拟的公共 API ScaleControl(SizeF, BoundsSpecified)。 也就是说,无论是否需要缩放,每次发生布局或字体更改时都会调用该方法。

新行为

从 .NET 6 服务版本开始,只有在需要缩放窗体或控件时才会调用 ScaleControl(SizeF, BoundsSpecified)。 Windows 窗体运行时根据监视器的自定义 DPI 设置以及设计应用程序的监视器上的 DPI 设置来计算缩放因子。 仅在缩放因子指示需要缩放时调用 ScaleControl(SizeF, BoundsSpecified)

更改类别

此更改会影响源兼容性

更改原因

进行此更改是为了提高性能和避免不必要的布局。

检查代码在这些可重写的方法中是否执行任何自定义的非缩放操作。

受影响的 API