gpt4 book ai didi

c# - 混合 WPF 和 winforms 项目 DPI 意识

转载 作者:太空狗 更新时间:2023-10-29 21:21:45 27 4
gpt4 key购买 nike

我有一个同时使用 winforms 和 WPF 的 C# 程序,我正在努力让它在高 DPI 环境中工作。目前,如果我从解决方案中删除所有 WPF 项目并运行它,它会很好地缩放,但是一旦我重新添加任何 wpf(功能所必需),缩放就会失败并且 UI 变得不可用。

这似乎与之前的 SO 问题完全相同:DPI Scaling in .Net 3.5 in Mixed WinForms and WPF ApplicationProblems 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/

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