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

标签 c# wpf winforms .net-4.6 highdpi

我有一个同时使用 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/

相关文章:

c# - 如何将 OData 与 ASP.net Core 正确集成

C# Socket TCP 发送,消息获取 "stuck"

c# - 从 PostCode 获取经度和纬度

c# - 使用带小数的指数

c# - NotifyIcon 是否具有 MouseDown 等效项?

c# - 默认主键设置将值增加 2

c# - 读取文件行的​​实现选择 - C#

c# - 设置文本并添加 Interaction.Triggers 时出现奇怪的 XAML 解析行为。 WPF

WPF 控件模板高度

c# - 在另一台 PC 上安装带有本地 SQL Server 数据库的 C# WPF 应用程序