Web内容在ChromiumFX中呈现两次

时间:2016-02-16 00:58:41

标签: c# wpf chromium chromium-embedded

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

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

我猜Chromium内核正在使用本机Windows API在场景后面渲染。因此,Surface硬件,OS API和Chromium内核可能存在一些不兼容的问题。但说实话,我不知道从哪里开始研究。你们能给我一个暗示吗?提前谢谢!

详细版本信息:

  • WPF - > 4.0
  • ChromiumFX - > 3.2526.1
  • CEF - > 3.2526.1359.gced449a
  • 铬 - > 47.0.2526.73
  • OS - > Win10 65bit
  • HW - > Surface Pro 3/4

enter image description here

1 个答案:

答案 0 :(得分:1)

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的值。