混合WPF和winforms项目DPI意识

Any*_*ope 6 c# wpf highdpi winforms .net-4.6

我有一个使用winforms和WPF的C#程序,我很难让它在高DPI环境中工作.目前,如果我从解决方案中删除所有WPF项目并运行它,它将可以很好地扩展,但是一旦我添加任何wpf(功能必需),扩展失败并且UI变得不可用.

这似乎与之前的SO问题完全相同:混合WinForms和WPF应用程序中的.Net 3.5中的DPI缩放以及使用DPI正确扩展WinForms的问题

我按照有关这些问题的建议,尝试添加清单文件和提供的dpi识别代码.

我还将项目升级到.net framework 4.6.1(从4.0开始)并包含了app.config设置: <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />

这确实影响了程序的主shell(因此,不是在一个小窗口中加载所有控件被压缩,主程序窗口打开最大化并显示正常)但是,当我从主窗口输入任何winforms子窗体或插件时,缩放失败.

当我输入任何WPF子窗体或插件,或返回到主屏幕时,这些渲染正确.只有winforms功能无法正确扩展.

有没有人对如何让混合winforms/WPF项目在高DPI中正确扩展有任何想法?

提前致谢

roh*_*wal 7

将WPF加载到项目中时,它会将进程升级为System DPI Aware.为了解决这个问题,首先:1)在条目汇编中的名称空间声明上方设置[assembly:DisableDpiAwareness]属性 2)您可以在项目中添加app.manifest文件并添加以下内容:

 <asmv3:windowsSettings
 xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
       <dpiAware>true/PM</dpiAware> 
 </asmv3:windowsSettings>
Run Code Online (Sandbox Code Playgroud)

这应该使您的WinForms和WPF内容都在正确的目标DPI.(但如果您使用不同的DPI进行多显示器设置,则无法进行缩放).

  • @AnyaHope我很惊讶它不起作用.实现此目的的另一种方法是在条目程序集中设置[assembly:DisableDpiAwareness]属性. (2认同)