我正在使用 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
最佳答案
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/