You need to enable JavaScript to run this app. 为何进入包含System.Windows.Clipboard.SetText的方法会改变WinForms窗体缩放
优惠活动
大模型
产品
解决方案
定价
更多

为何进入包含System.Windows.Clipboard.SetText的方法会改变WinForms窗体缩放

问题原因

你遇到的窗体缩放问题是剪贴板类引用错误+DPI感知模式冲突导致的,具体逻辑如下:

  • 你当前是WinForm项目,代码里调用的System.Windows.Clipboard属于WPF框架的PresentationCore.dll程序集,不是WinForm原生的剪贴板类
  • .NET运行时会在方法第一次执行前进行JIT编译,同时加载该方法用到的所有类型对应的依赖程序集,所以你刚进入方法、还没执行任何代码行时,JIT已经完成了PresentationCore.dll的加载
  • WPF程序集加载时会自动初始化WPF的高DPI感知逻辑,和你当前WinForm项目默认的DPI感知模式不兼容,触发系统对窗体进行强制DPI缩放,最终表现为窗体缩小20%左右
  • 注释掉剪贴板调用行后,JIT编译方法时不会加载WPF相关程序集,自然不会触发DPI适配逻辑,窗体就不会变化

解决方案

直接替换剪贴板调用为WinForm原生的剪贴板类即可,无需修改其他逻辑:

public override void copyXmlTextToClipboard()
{
    string xmlText = xmlNode.OuterXml;
    // 替换为WinForm原生剪贴板类,不会加载WPF程序集
    System.Windows.Forms.Clipboard.SetText(xmlText);
}

如果后续仍存在高DPI适配问题,可以在项目中添加应用程序清单(app.manifest),开启WinForm的高DPI适配:

<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM</dpiAware>
  </windowsSettings>
</application>

内容的提问来源于stack exchange,提问作者Christopher Hamkins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 15:06:05