插件环境中的CEFGlue无法渲染

时间:2016-08-17 08:37:47

标签: chromium-embedded cefglue

我一直在https://bitbucket.org/xilium/xilium.cefglue/downloads提供的CEFGlue样本中引用“CefGlue.Samples.WpfOsr”,并尝试将其集成到插件程序集中。无论我做什么,当作为插件运行时,浏览器控件都不会在视图中呈现。但是,这在独立模式下运行时工作正常。有人可以建议怎么去吗?

1 个答案:

答案 0 :(得分:0)

所以我找到了控制没有出现的根本原因。在CEFGlue代码库中的某个地方是跟随行,这使得它遍历可视树一直向上寻找类型“Window”,以便获得其父窗口句柄并呈现CEFBrowser控件的UI。

Window parentWnd = FindParentOfType<Window>(this);

private static T FindParentOfType<T>(DependencyObject obj) where T : DependencyObject
        {
            DependencyObject parentObj = VisualTreeHelper.GetParent(obj);
            if (parentObj == null)
                return null;

            // Try to type cast the parent to the desired type.
            // If the cast succeeds, we've found the desired parent.
            T parent = parentObj as T;
            if (parent != null)
                return parent;

            // If we get here, the current parent wasn't of the right type, so keep looking recursively
            return FindParentOfType<T>(parentObj);
        }

可能是因为我拥有的插件环境,这个可视树没有那种父窗口,导致一个空句柄。因此,我的解决方案是找到父进程的主窗口句柄并将其提供给CEF。希望它可以帮助一些有类似情况的人。