War*_*ung 8 .net c# wpf dpi winforms
我遇到了让WinForms应用程序在高DPI设置下正确显示的问题.我检查了各种网站,WinForms都有正确的AutoScaleMode.我已经尝试将它设置为DPI和Font.但是,当使用高DPI设置(例如125%)时,表格总是会在底部附近被切断.
我添加了一些代码来检查,如果我将AutoScaleMode设置为DPI,当表单加载时,我看到表单加载时AutoScaleDimensions为120,120,而CurrentAutoScaleDimensions也为120,120.在Form.designer.cs文件中,有一行将AutoScaleDimension设置为96,96.
如果我将AutoScaleMode设置为Font,那么我可以在设计器中看到AutoScaleDimension被正确设置为新的System.Drawing.SizeF(6F,13F),但是当表单加载时,AutoScaleDimension和CurrentAutoScaleDimension都设置为8F,16F.
这个应用程序混合了一些WPF和WinForms,WPF屏幕首先出现.因此,基于混合WinForms和WPF应用程序中的.Net 3.5中的DPI Scaling,我尝试为应用程序设置TextFormattingMode,并为首先显示的WPF屏幕设置"显示",但它没有任何区别.
坦率地说,我不知道造成这种情况的原因.我想我可以通过在运行时检测DPI来添加代码来以编程方式调整大小,但我不应该这样做.AutoScaleMode(和相关的)属性应该使这相当自动化.那么我还应该检查哪些可能会导致这个问题呢?
几天前我遇到了类似的问题.经过几个小时的研究,我终于找到了一个非常简单的解决方案 - 添加<dpiAware>
到应用程序清单中.以下是微软网站的一个例子.
<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>
Run Code Online (Sandbox Code Playgroud)
对于我的情况,我需要设置<dpiAware>
为Per-monitor以使其正常工作.也就是说,将中间的行改为<dpiAware>Per-monitor</dpiAware>
.
下面列出了每个值之间的差异(这些来自MSDN):
是否有可能随着显示器尺寸和更高的 DPI 设置,屏幕不再大到足以显示整个表单?我这么说是因为我正在开发一个 1024 x 768 winforms 应用程序,并正在尝试用户 DPI 设置。如果我将 DPI 设置为 150%,我将无法再在显示器上看到表单的底部部分,但应用程序可以正确缩放。
归档时间: |
|
查看次数: |
3510 次 |
最近记录: |