我有一个同时使用 winforms 和 WPF 的 C# 程序,我正在努力让它在高 DPI 环境中工作。 目前,如果我从解决方案中删除所有 WPF 项目并运行它,它会很好地缩放,但是一旦我重新添加任何 wpf(功能所必需),缩放就会失败并且 UI 变得不可用。
这似乎与之前的 SO 问题完全相同:DPI Scaling in .Net 3.5 in Mixed WinForms and WPF Application和 Problems getting WinForms to scale correctly with DPI
我听从了关于这些问题的建议,并尝试添加 list 文件和提供的 dpi 感知代码。
我还将项目升级到 .net framework 4.6.1(从 4.0)并包含了 app.config 设置:<add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
这确实影响了程序的主 shell(因此,主程序窗口打开时最大化并显示正常,而不是在一个小窗口中加载,所有控件都被压扁)但是,当我从主窗口,缩放失败。
当我输入任何 WPF 子窗体或插件,或返回主屏幕时,这些都正确呈现。只有 winforms 功能无法正确缩放。
有没有人对如何让混合 winforms/WPF 项目在高 DPI 下正确缩放有任何想法?
提前致谢
最佳答案
当 WPF 加载到项目中时,它会将进程提升为系统 DPI 感知。为了解决这个问题,首先: 1) 在入口程序集中的命名空间声明上方设置 [assembly: DisableDpiAwareness] 属性 2) 您可以在项目中添加一个 app.manifest 文件并添加以下内容:
<asmv3:windowsSettings
xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true/PM</dpiAware>
</asmv3:windowsSettings>
这应该会以正确的目标 DPI 呈现您的 WinForms 和 WPF 内容。 (但是,如果你有一个具有不同 DPI 的多显示器设置,这将无法扩展)。
关于c# - 混合 WPF 和 winforms 项目 DPI 意识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34900791/