症状
实现自己的缩放逻辑高 DPI 设置的 Windows 窗体应用程序可能会遇到异常时这些应用程序通过使用下面的.config 文件设置选择到 Microsoft.NET Framework 4.5.2 高 DPI 更改进行缩放︰
<appSettings>
<add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
</appSettings>
解决方案
应用比例因子缩放值之上的应用程序可能会遇到额外缩放时他们会选择到.NET Framework 4.5.2 高 DPI 改进。若要解决此问题,请更新应用程序的应用在ToolStrip.ImageScalingSize默认值缩放缩放逻辑。此更改将避免引入额外的缩放比例。
例如,应用程序有以下代码将两次缩放工具条按钮︰
public MyToolStrip()
{
IntPtr hDC = GetDC(new HandleRef(null, IntPtr.Zero));
double xFactor = GetDeviceCaps(new HandleRef(null, hDC), LOGPIXELSX) / 96.0;
double yFactor = GetDeviceCaps(new HandleRef(null, hDC), LOGPIXELSY) / 96.0;
this.ImageScalingSize = new Size((int)(this.ImageScalingSize.Width * xFactor), (int)(this.ImageScalingSize.Height * yFactor));
InitializeComponent();
}
下面的代码可用于扩展从常量默认大小,或您所需的图像的大小︰
this.ImageScalingSize = new Size((int)(16 * xFactor), (int)(16 * yFactor));