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

C# Winforms应用程序在绘制图表时更改高dpi监视器上的缩放比例,c#,.net,winforms,scaling,C#,.net,Winforms,Scaling,我有一个Winforms应用程序(C#,.NET 4.7),在我的系统上使用1920x1080监视器时没有问题。我已将主窗口的AutoScaleMode设置为Font,并将true添加到清单中。 在具有高分辨率(3840x2160)屏幕的计算机上运行该程序似乎也可以正常工作。所有内容都缩放正确,并且都可读。直到我打开一个数据文件并在地图或图表控件上显示结果。然后整个程序突然重新调整到原来大小的50%左右,所有字体都变小了,无法阅读。使用Windows显示设置更改字体大小或分辨率无效。是什么导致了

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

在遵循了其中所述的所有最佳实践后,仍然不起作用。然而,Telerik网站上的另一条消息让我走上了正轨。 问题是由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)。

以及由Hans Passant标记的副本。@Jimi:我看过了,它确实包含了很多额外的信息。但没有提到“自动缩放尺寸”设置。(据我所知)你看到那里提到了Telerik控件了吗?Telerik的一些控件引用WPF组件。作为直接结果,应用程序的DPI感知可以改变;对于哪个模型,这取决于使用的库。您可以启用应用程序以支持DPI感知,也可以禁用它,或者可以基于每个线程/每个进程启用它。无论如何,根据字体大小缩放UI可能很棘手,你永远不知道它会是什么。可能,在DPI上进行扩展。如果您阅读了该链接上的最后一个注释,它将解释如何禁用WPF自动DPI缩放(如果需要)。