c# - Web 内容在 ChromiumFX 中呈现两次

标签 c# wpf chromium chromium-embedded

我正在使用 ChromiumFX在 WPF 应用程序中呈现一些网页内容。但似乎内容以某种方式呈现了两次,如下面的屏幕截图所示。较大的是正常运行的预期大小,而较小的不响应任何鼠标操作。较小的一张就像一张静态图片。

请注意,我们已经在具有不同屏幕尺寸和分辨率的 x86/x64 机器上的 Win7/Win8/Win10 上测试了完全相同的应用程序。除了 Surface Pro 3/4 + Win10 之外,一切正常。它也适用于 Surface Pro 1 + Win8。

我猜 Chromium 内核正在使用原生 Windows API 在后台进行渲染。因此,Surface 硬件、操作系统 API 和 Chromium 内核可能存在一些不兼容的问题。但老实说,我不知道从哪里开始研究。你们能给我一个提示吗?提前致谢!

详细版本信息:

  • WPF -> 4.0
  • ChromiumFX -> 3.2526.1
  • CEF -> 3.2526.1359.gced449a
  • Chrome -> 47.0.2526.73
  • 操作系统 -> Win10 65 位
  • 硬件 -> Surface Pro 3/4

enter image description here

最佳答案

2016-7-11更新

经过进一步测试,原来的方案似乎并不是最好的方案。如果将另一台显示器连接到 PC 并将应用程序窗口移到那里,问题会再次发生。

所以最终的解决方案应该是将 app.manifest 添加到应用程序并启用 dpiAware 属性。

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


终于搞定了。所以我会给出答案,以防有人遇到同样的问题。

其实这个问题不仅仅发生在Win10 + Surface Pro。它发生在所有使用 win10 的设备上。一旦用户更改了默认 DPI 设置,问题就会出现。

提交申请的解决方法是 disable display scaling on high dpi settings为您的应用。

要一劳永逸地解决问题,您可能需要在安装过程中为您的应用程序添加一个注册表项,如下所示:

Key="SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"

<RegistryValue Type="string" Name="APPLICATIONROOTDIRECTORY]ApplicationName.exe" Value="~ HIGHDPIAWARE" />

请注意,如果您使用单独的进程进行渲染,请将上述值设置为 CfxSettings.BrowserSubprocessPath 的值。

关于c# - Web 内容在 ChromiumFX 中呈现两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35421852/

相关文章:

c# - 将 C# 中的 String^ 转换为 C++/CLI 中的 CString

c# - 如何使用 OnSerializing 和 OnDeserializing 属性?

c# - ListView 中的 OnSelectedIndexChanged 未触发

wpf - WPF MVVM TabControl显示我的Views/ViewModels

electron - Puppeteer:下载适用于不同平台的 Chromium

c# - 是否有 C# 的 atoi 实现

c# - ValueTuple 不支持 DisplayMemberPath。组合框,WPF

c# - 我如何知道 ListBoxItem 是否是 Wpf 的 ListBox 中的最后一项?

node.js - 如何在 Node.js Puppeteer Headless=false Chromium 浏览器中清除历史记录(清除浏览数据)

javascript - 在 Chrome 控制台中执行多条 javascript 行时出现问题