我是否必须在源代码中处理HiDPI功能,或者是否由.Net提供。窗口?

时间:2016-03-31 14:49:27

标签: c# .net user-interface autoscaling

我正在使用C#和.Net 4.5开发软件。我在较旧的机器上启动了该项目,dpi缩放比例为100%。在我的新机器上,由于高分辨率显示,我不得不设置200%的缩放比例。

在Visual Studio Designer中,该软件的Gui呈现完美: Gui within the Designer

编译软件的Gui呈现错误:Gui in compiled software

我的期望是,因为我只使用.Net Gui Elements / Controls而且没有自行设计的gui元素,所以windows应该可以毫无问题地处理缩放。但正如我所见,Windows没有。

我是否必须在Visual Studio的项目设置中启用HiDPI选项,还是必须在我的代码中处理HiDPI?

2 个答案:

答案 0 :(得分:4)

默认情况下,大多数Windows窗体应用程序都不支持DPI。事实上,大多数Windows应用程序都不支持DPI。因此,您需要在应用程序清单中选择加入DPI:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" 
          xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
 <asmv3:application>
   <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
     <dpiAware>true</dpiAware>
   </asmv3:windowsSettings>
 </asmv3:application>
</assembly>

由于DPI感知是按进程进行的,因此VS设计者在此事上别无选择 - 它在可识别DPI的Visual Studio中运行。

尽管如此,确保一切都能正常使用低DPI和高DPI。 DPI识别意味着&#34;我将正确处理所有DPI扩展,不需要为我伪造它; 。感谢#&34;希望您已经使用适当的自动缩放和布局设计表单,或者使用独立于设备的单元而不是像素:)

当您的应用程序没有声明可识别DPI时,Windows假定您是一个未正确处理DPI的遗留应用程序。因此,为了防止出现问题,它假装您实际渲染到的显示器更小 - 在您的情况下,尺寸减半,然后将生成的表面升级到适当的尺寸。这会导致模糊,特别是文字,但确保一切都具有适当的大小和比例 - 例如你不会让按钮小于它们内部的文字或重叠的控件。

如果使用正确的布局方法,Windows窗体和WPF都可以很好地支持正确处理DPI,因此.NET绝对支持DPI。但是两者都非常能够不受DPI影响,并且大多数应用程序仍然忽略DPI问题,因此默认设置与任何其他Windows应用程序相同。由于没有&#34;传统的WPF&#34;应用程序,以及最简单的WPF方法也是DPI识别,WPF的默认项目模板已经包含一个声明DPI感知的清单,所以我假设你在Windows Forms中创建了你的项目:)事实上,考虑到Windows如今的发展,你可能想要一个程序集清单,以正确管理所有兼容性功能:)

要获得额外奖励,当您有多台具有不同DPI的显示器时会出现更多问题 - 要声明对此的适当支持,您使用<dpiAware>true/PM</dpiAware>。这仅适用于Windows 8.1+,正确实施可能非常棘手。

答案 1 :(得分:0)

这样做对我有用:

  1. 单击mremoteng桌面链接属性
  2. 转到“兼容性”标签
  3. 在“设置”部分下,选中“替代高DPI缩放行为”
  4. 选择“应用程序”可选择列表。

就是这样,我希望它也对您有用。