绘制图表时,Winforms应用程序会在高dpi监视器上更改缩放比例

时间:2019-01-16 15:44:47

标签: c# .net winforms scaling

我有一个Winforms应用程序(C#、. NET 4.7),在使用1920x1080监视器的系统上没有问题。我在主窗口中将AutoScaleMode设置为Font,并将true添加到清单中。 在具有高分辨率(3840x2160)屏幕的计算机上运行该程序似乎也可以正常工作。一切都正确缩放,并且一切都是可读的。直到我打开数据文件并在“地图”或“图表”控件上显示结果。然后整个程序突然重新缩放到其原始大小的大约50%,并且所有字体变小了。使用Windows显示设置更改字体大小或分辨率无效。是什么原因导致运行时缩放,我该如何解决?

1 个答案:

答案 0 :(得分:0)

遵循this post:中所述的所有最佳做法后,它仍然无法正常工作。但是,Telerik网站上的另一个comprehensive explanation使我步入正轨。 该问题是由GMap控件引起的,但可能是由在不同系统上设计的任何第三方控件引起的。该控件在Designer.cs文件中包含一个缩放设置:

this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);

此设置是在创建新控件时由IDE自动添加的,并且基于创建该控件的系统的DPI设置。在96 DPI系统上,始终是

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

因此,我为我的应用创建的所有表单都具有基于96DPI的设置,但是GMap控件具有不同的设置。重新绘制GMap控件时,它导致整个应用程序使用错误的AutoScaleDimensions进行缩放。解决方案就是简单地搜索所有出现的AutoScaleDimensions,并将它们全部设置为(6F,13F)。