混合WPF和winforms项目DPI意识

我有一个使用winforms和WPF的C#程序,我很难让它在高DPI环境中工作。 目前,如果我从解决方案中删除所有WPF项目并运行它,它将会很好地扩展,但是只要我重新添加任何wpf(function必需),扩展就会失败并且UI变得无法使用。

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

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

我还将项目升级到.net framework 4.6.1(从4.0开始)并包含了app.config设置:

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

当我输入任何WPF子表单或插件,或返回到主屏幕时,这些正确呈现。 只有winformsfunction无法正确扩展。

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

提前致谢

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

   true/PM  

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

我的同事终于解决了这个问题。 由于配置设置等都不适用于此项目,我们尝试删除winforms shell并将其替换为WPF shell。 一旦在WPF中重写了主shell项目,所有’插件’都出现在正确的DPI缩放中。

不是我知道的最好的解决方案,考虑到它涉及重写现有代码,但这是唯一能够为我们解决问题的方法。