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中文网其他相关文章!