发布于 2016-03-31 14:57:45
默认情况下,大多数Windows窗体应用程序都是DPI不知道的。事实上,大多数Windows应用程序并未被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设计人员在这个问题上没有选择-它运行在Visual中,而后者是新闻部所知道的。
不过,要确保所有的东西都能正常工作,不管是低新闻部还是高新闻部。新闻部意识到“我将处理所有新闻部缩放正确,不需要为我假装它;谢谢。”希望您已经使用了适当的自动标号和布局,或者使用了独立于设备的单元,而不是像素:)
当应用程序未声明已被DPI察觉时,Windows假设您是一个没有正确处理DPI的遗留应用程序。因此,为了防止出现问题,它假装你实际上是在渲染一个更小的显示器--在你的例子中,大小是一半,然后将结果表面放大到适当的大小。这会导致模糊,尤其是文本,但确保所有事物都有适当的大小和比率--例如,您不会得到比文本小的按钮,也不会有重叠的控件。
如果您使用正确的布局方法,Windows和WPF都非常支持DPI的正确处理,因此.NET绝对具有新闻部感知能力。但两者都很有能力成为DPI --不知道,而且大多数应用程序仍然忽略DPI问题,因此默认情况与任何其他Windows应用程序相同。由于没有“遗留的WPF”应用程序,而且最简单的方法是知道WPF,因此WPF的默认项目模板已经包含了声明DPI意识的清单,因此我假设您在Windows窗体中创建了项目:)事实上,考虑到当前Windows的发展情况,您可能希望有一个程序集清单,以便正确地管理所有兼容性特性:)
为了获得额外的好处,当您有多个带有不同DPI的监视器时,还会出现更多的问题--为了声明对此的适当支持,您可以使用<dpiAware>true/PM</dpiAware>。这只能在Windows 8.1+上使用,要正确地实现是非常棘手的。
发布于 2020-08-28 14:24:08
这样做对我很有帮助:
就这样,我希望它也适用于你。
https://stackoverflow.com/questions/36336797
复制相似问题