Web 内容在 ChromiumFX 中呈现两次

Web content is rendered twice in ChromiumFX

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

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

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

详细版本信息:

2016-7-11更新

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

所以最终的解决方案应该是将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 的值。