我正在使用ChromiumFX在WPF应用程序中呈现一些webcontent。但似乎内容以某种方式呈现两次,如下面的屏幕截图所示。较大的一个是正常运行的预期大小,而较小的一个对任何鼠标操作都没有响应。较小的一个就像静态画面一样。
请注意,我们已经在具有不同屏幕尺寸和分辨率的x86 / x64机器上的Win7 / Win8 / Win10上测试了完全相同的应用程序。除了Surface Pro 3/4 + Win10之外,一切正常。它也适用于Surface Pro 1 + Win8。
我猜Chromium内核正在使用本机Windows API在场景后面渲染。因此,Surface硬件,OS API和Chromium内核可能存在一些不兼容的问题。但说实话,我不知道从哪里开始研究。你们能给我一个暗示吗?提前谢谢!
详细版本信息:
答案 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
的值。