插件环境中的 CEFGlue 不渲染
CEFGlue in plug-in enviornment not rendering
我一直在引用 https://bitbucket.org/xilium/xilium.cefglue/downloads 中可用的 CEFGlue 示例中的 "CefGlue.Samples.WpfOsr",并尝试将其集成到插件程序集中。无论我做什么,当 运行 作为插件时,浏览器控件都不会在视图中呈现。然而,当 运行 在独立模式下时,这工作正常。有人可以建议怎么做吗?
所以我找到了控件没有显示的根本原因。 CEFGlue 代码库中的某处是以下行,这使得它遍历可视化树一直向上寻找类型“Window”,以便获得其父 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);
}
可能是因为我的插件环境,这个可视树没有那种父Window,导致空句柄。所以我的解决方案是找到父进程的主 window 句柄并将其交给 CEF。希望对有类似情况的朋友有所帮助。
我一直在引用 https://bitbucket.org/xilium/xilium.cefglue/downloads 中可用的 CEFGlue 示例中的 "CefGlue.Samples.WpfOsr",并尝试将其集成到插件程序集中。无论我做什么,当 运行 作为插件时,浏览器控件都不会在视图中呈现。然而,当 运行 在独立模式下时,这工作正常。有人可以建议怎么做吗?
所以我找到了控件没有显示的根本原因。 CEFGlue 代码库中的某处是以下行,这使得它遍历可视化树一直向上寻找类型“Window”,以便获得其父 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);
}
可能是因为我的插件环境,这个可视树没有那种父Window,导致空句柄。所以我的解决方案是找到父进程的主 window 句柄并将其交给 CEF。希望对有类似情况的朋友有所帮助。