gpt4 book ai didi

c# - 让 WinForms 使用 DPI 正确缩放的问题

转载 作者:太空狗 更新时间:2023-10-29 18:31:40 26 4
gpt4 key购买 nike

我遇到了让 WinForms 应用程序在高 DPI 设置下正确显示的问题。我检查了各种网站,WinForms 都有正确的 AutoScaleMode。我试过将它设置为 DPI 和字体。但是,当使用高 DPI 设置(例如 125%)时,表格总是在底部附近被截断。

我添加了一些代码来检查,如果我将 AutoScaleMode 设置为 DPI,当表单加载时,我看到当表单加载时 AutoScaleDimensions 是 120,120,而 CurrentAutoScaleDimensions 也是 120,120。在 Form.designer.cs 文件中,有一行将 AutoScaleDimension 设置为 96,96。

如果我将 AutoScaleMode 设置为 Font,那么我可以在设计器中看到 AutoScaleDimension 被正确设置为 new System.Drawing.SizeF(6F, 13F),但是当加载表单时,AutoScaleDimension 和 CurrentAutoScaleDimension 都被设置为 8F,16F .

此应用将一些 WPF 与 WinForms 混合在一起,WPF 屏幕首先出现。所以基于DPI Scaling in .Net 3.5 in Mixed WinForms and WPF Application我尝试将应用程序和首先显示的 WPF 屏幕的 TextFormattingMode 设置为“显示”,但这没有任何区别。

坦率地说,我不知道是什么原因造成的。我想我可以添加代码以通过在运行时检测 DPI 以编程方式调整事物的大小,但我不应该这样做。 AutoScaleMode(和相关)属性应该使这相当自动化。那么我还应该检查哪些内容可能会导致此问题?

最佳答案

几天前我遇到了类似的问题。经过几个小时的研究,我终于找到了一个非常简单的解决方案——添加 <dpiAware>到应用程序 list 。这是来自 Microsoft's website 的示例.

<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>

对于我的情况,我需要设置 <dpiAware>到Per-monitor使其正常工作。即把中间的那一行改成<dpiAware>Per-monitor</dpiAware> .

下面列出了每个值之间的差异(这些来自MSDN):

  • False -- 将应用程序设置为不支持 DPI。
  • True -- 将应用程序设置为系统 DPI 感知。
  • Per-monitor——在 Windows 8.1 上,将应用程序设置为 per-monitor-DPI aware。在 Windows Vista 到 Windows 8 上,将应用程序设置为不支持 DPI。
  • True/PM -- 在 Windows 8.1 上,将应用程序设置为每个监视器 DPI 感知。在 Windows Vista 到 Windows 8 上,将应用程序设置为系统 DPI 感知。

关于c# - 让 WinForms 使用 DPI 正确缩放的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24252851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com