某些 Windows Forms 應用程式在使用 .NET Framework 4.5.2 時出現的異常縮放

症狀

Windows Forms實作自家高DPI縮放邏輯的應用程式,若選擇使用以下 .config 檔案設定.NET Framework 4.5.2高DPI變更Microsoft,可能會遇到異常縮放:

<appSettings>

 <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />

</appSettings>

      

解決方式

在擴展值之上套用縮放因子的應用程式,當選擇加入 .NET Framework 4.5.2 高 DPI 改進時,將面臨額外的擴展。 為了解決這個問題,請更新應用程式的縮放邏輯,讓 ToolStrip.ImageScalingSize 預設值也要調整縮放。 此變更將避免額外的縮放。 

例如,包含以下程式碼的應用程式會將 ToolStrip 按鈕放大兩次:

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));