Winforms 为什么Visual Studio 2017';s新的自动缩放支持在运行时调整我的窗体应用程序的大小?

Winforms 为什么Visual Studio 2017';s新的自动缩放支持在运行时调整我的窗体应用程序的大小?,winforms,visual-studio-2017,dpi,Winforms,Visual Studio 2017,Dpi,我们有一个Windows窗体应用程序,用于测试我们的产品,近10年来,它的窗体和对话框几乎相同。设计器中的AutoScaleMode对于这两种表单都设置为字体,并且自原始设计以来一直没有更改。AutoSize设置为false,只是为了更好地度量(我猜)AutoSizeMode设置为GrowtOnly。以下源代码行位于Program.cs中: Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefaul

我们有一个Windows窗体应用程序,用于测试我们的产品,近10年来,它的窗体和对话框几乎相同。设计器中的AutoScaleMode对于这两种表单都设置为字体,并且自原始设计以来一直没有更改。AutoSize设置为false,只是为了更好地度量(我猜)AutoSizeMode设置为GrowtOnly。以下源代码行位于Program.cs中:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
记住,这些年来,它一直在完美地工作

VS2017的最新更新之一包括对具有不同DPI的监视器的自动缩放支持。我有一个相对较高的DPI监视器,所以当我对设置对话框进行一些更改(添加控件等)时,我开始在设计器界面的顶部看到亮黄色横幅,告诉我自动缩放设置为125%,我想更改吗?我试着来回移动,当处于100%模式(自动缩放关闭)时,有人警告我XAML表单可能无法正确显示。很好,我正在处理表单,所以我回到“正常”缩放,表单看起来很好

直到我试着运行程序。现在,当我启动程序时,主窗体如下所示(删除详细信息以保护罪犯):

…但当我打开“设置”对话框时,它看起来是这样的:

哎呀!在实践中看起来更糟,这里的相对图像不能公正地反映大小和比例的差异

我不知道发生了什么变化,也不知道这是怎么发生的,但我无法将其投入生产。我尝试过更改自动缩放设置,但没有效果。有人能给我指一下正确的方向吗

提前谢谢

编辑:似乎只有在调试中运行应用程序时,才会在我的机器上进行重新缩放。在我的机器上,无论是什么弄乱了表单的显示,在我的同事的机器上都不会这样做,也不会复制到构建服务器生成的可执行文件中


另一方面,我尝试了我能找到的所有DPI相关设置,添加了那些由于程序的年龄而不存在的设置,但都没有用。我尝试过的任何东西都没有对程序在我的机器上的古怪显示产生任何影响。啊。

我尝试了我能找到的所有技巧,除了完全禁用自动缩放功能,什么都没用。我最终将我们的开发分支合并到我的功能分支中,并检查了所有270次编辑,选择了我能找到的所有尺寸参数和所有控件的最旧设置。啊。 一路上,我在表单的Designer.cs文件中偶然发现了以下行:

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
据我所知,VisualStudio的设计器无法访问此设置,我也找不到有关如何或为什么设置此设置的任何信息。我确实发现,在早期版本中,它的工作方式与预期一致,其值为(8F,17F)——因此我手动编辑该行以匹配较旧的工作版本。成功

我还检查了我的Windows显示设置,自定义缩放值为100%,因此我使用了我在上面评论的第一个链接(谢谢@Jimi)后找到的一篇文章中提到的注册表黑客来禁用Visual Studio中的自动缩放,然后关闭通知。现在我(终于)重新开始工作了

注册表黑客在这里:

如果使用了DaveN59答案中提到的注册表黑客,并且已经有了..\devenv.exe的条目(我以前设置为以管理员身份运行),则将DPIUNAWARE字符串添加到“数据”的末尾。确保使用空格作为分隔符

示例:^RUNASADMIN DPIUNAWARE

我不确定^的用途,但它就在那里,我只是添加了DPIUNAWARE字符串。此外,如果您只添加此字符串,它将显示为无标度,但您仍将看到黄色横幅。要关闭该选项,您需要从VisualStudio中的with中选择该选项。上面也提供了注册表黑客的链接,其中有相关说明。为了方便起见,这里是菜单导航路径

要禁用通知,请选择工具>选项以打开选项 对话然后,选择Windows窗体设计器>常规,并设置DPI 将通知缩放为False


看看这些注释是否有帮助:。如果您决定采用另一个路径,也会出现这种情况:。AutoScaleMode在设计时也处于活动状态。因此,如果您以前以125%的速度愉快地设计了表单,启用了DPI虚拟化,现在打开设计器,那么,砰的一声,一切都被移动了。将其向后移动往往效果不太好,使用字体而不是Dpi模式进行缩小实际上是有损的,因为文本在较低的Dpi下需要相应的更多空间。如果使用注册表破解,请确保将正确的绝对路径放入devenv.exe。如果您有多个版本,则需要将所有版本都输入注册表。