WinForms 自動縮放:適應系統字體和 DPI 設定
引言
過去的評論經常認為 WinForms 的自動縮放功能不如 WPF。然而,根據作者的研究和測試,WinForms 在 .NET 2.0 中的自動縮放功能有了顯著改進。
縮放限制控制項
儘管有所改進,WinForms 中某些控制項仍存在縮放限制,應避免使用:
-
AutoSize = False 且繼承字體的 Label: 在屬性視窗中明確設定控制項的字體以使其顯示為粗體。
-
ListView 列寬:(重寫窗體的 ScaleControl 來修正此問題)
- SplitContainer 的 Panel1MinSize、Panel2MinSize 和 SplitterDistance 屬性
-
MultiLine = True 且繼承字型的 TextBox: 明確設定控制項的字型。
-
ToolStripButton 的圖像: 在窗體的建構子中調整 ToolStrip.AutoSize 和 ToolStrip.ImageScalingSize。
-
PictureBox.SizeMode 必須設定為 Zoom 或 StretchImage。
-
TreeView 的圖片: 以 CreateGraphics.DpiX 和 .DpiY 設定 ImageList.ImageSize。
-
窗體大小: 建立後手動縮放固定大小的窗體。
自動縮放設計指南
為了確保 WinForms 中的正確自動縮放,必須遵循以下準則:
- 將所有 ContainerControls 的 AutoScaleMode 設定為 Font。
- 將所有 ContainerControls 的 AutoScaleDimensions 設定為 6F, 13F,假設為 96dpi 和預設字體(MS Sans Serif)。
- 在 96dpi 下工作 並編輯屬性以覆寫 Visual Studio 的 DPI 縮放行為。
- 避免在容器層級設定字體。
- 將控制項停靠在面板上,而不是直接停靠到 UserControls 上。
- 動態新增控制項時,暫停和恢復佈局。
- 將衍生自 ContainerControl 的基底類別的 AutoScaleMode 保持為 Inherit。
- 在程式碼中定義 MinSize 和 MaxSize,而不是在設計器中。
- 在容器內一致地使用 停靠或錨定。
- 在 96dpi 下,將設計器中的 窗體大小保持在 1000x680 以下,以避免縮放時裁剪。
以上是WinForms 控制項如何正確自動縮放到系統字體和 DPI 設定?的詳細內容。更多資訊請關注PHP中文網其他相關文章!