【问题标题】:Do I have to handle HiDPI capabilities within my source code, or is it provided by .Net resp. Windows?我是否必须在我的源代码中处理 HiDPI 功能,还是由 .Net 提供。视窗?
【发布时间】:2020-08-28 22:24:08
【问题描述】:

我正在使用 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?

【问题讨论】:

    标签: c# .net user-interface autoscaling


    【解决方案1】:

    默认情况下,大多数 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 感知意味着“我将正确处理所有 DPI 缩放,无需为我伪造它;谢谢。”希望您设计的表单具有适当的自动缩放和布局,或者使用与设备无关的单位而不是像素:)

    当您的应用程序未声明可识别 DPI 时,Windows 会假定您是未正确处理 DPI 的旧版应用程序。因此,为了防止出现问题,它假装您实际上正在渲染到更小的显示器 - 在您的情况下,是一半大小,然后将生成的表面放大回适当的大小。这会导致模糊,尤其是文本,但可以确保所有内容都具有适当的大小和比例 - 例如您不会得到比其中的文本更小的按钮或重叠的控件。

    如果您使用正确的布局方法,Windows 窗体和 WPF 都对正确处理 DPI 提供了很好的支持,因此 .NET 绝对可以识别 DPI。但两者也完全能够不感知 DPI,并且大多数应用程序仍然忽略 DPI 问题,因此默认值与任何其他 Windows 应用程序相同。由于没有“旧版 WPF”应用程序,并且执行 WPF 的最简单方法也是 DPI 感知,因此 WPF 的默认项目模板已经包含一个声明 DPI 感知的清单,所以我假设您在 Windows 窗体中创建了您的项目 :) 事实上,考虑到现在 Windows 的发展方式,您可能无论如何都希望拥有一个程序集清单,以正确管理所有兼容性功能:)

    为了获得额外的奖励,当您拥有多个具有不同 DPI 的显示器时会出现更多问题 - 要声明对此的适当支持,您可以使用 &lt;dpiAware&gt;true/PM&lt;/dpiAware&gt;。这仅在 Windows 8.1+ 上可用,并且正确实施可能非常棘手。

    【讨论】:

      【解决方案2】:

      这样做对我有用:

      1. 点击mremoteng桌面链接属性
      2. 转到兼容性选项卡
      3. 在“设置”部分下选中“覆盖高 DPI 缩放行为”
      4. 在可选列表中选择“应用程序”。

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

      【讨论】:

        猜你喜欢
        • 2016-11-16
        • 2022-09-29
        • 1970-01-01
        • 1970-01-01
        • 2018-11-11
        • 1970-01-01
        • 2012-02-03
        • 1970-01-01
        • 2022-08-10
        相关资源
        最近更新 更多