.NET 7/8 WinForms控件字体随系统文本大小变化问题求助
解决.NET 7/8 WinForms忽略系统文本大小缩放的问题
要恢复.NET Framework 4.8下忽略系统文本大小调整的行为,可通过以下步骤实现:
核心解决方案:设置文本缩放策略
在应用启动代码中添加Application.SetTextScaleFactorPolicy(TextScaleFactorPolicy.Ignore),该API是.NET 7及以上新增的,专门用于控制应用是否响应系统文本缩放。
完整启动代码示例:
Application.SetHighDpiMode(HighDpiMode.PerMonitorV2); // 忽略系统文本大小缩放,与.NET Framework 4.8行为对齐 Application.SetTextScaleFactorPolicy(TextScaleFactorPolicy.Ignore); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm());
原理说明
- .NET Framework 4.8的
AutoScaleMode.Dpi仅响应显示器DPI变化,不处理系统文本缩放滑块的调整。 - .NET 7/8默认会同时响应显示器DPI和文本缩放,通过设置
TextScaleFactorPolicy.Ignore,可以让应用回到仅基于显示器DPI缩放的逻辑,控件字体大小不再随系统文本滑块变动。
额外注意事项
- 该设置全局生效,会影响所有窗体和控件。
- 如果需要针对单个窗体例外处理,可以重写窗体的
OnTextScaleFactorChanged方法,自行控制缩放逻辑:protected override void OnTextScaleFactorChanged(EventArgs e) { // 注释掉base调用,阻止窗体应用文本缩放 // base.OnTextScaleFactorChanged(e); }
内容的提问来源于stack exchange,提问作者Dave Doknjas
相关产品推荐
相关产品推荐

