CEFGlue в плагине не рендеринг
Я ссылался на "CefGlue.Samples.WpfOsr" внутри примеров CEFGlue, доступных по адресу https://bitbucket.org/xilium/xilium.cefglue/downloads и пытался интегрировать их в сборку плагина. Независимо от того, что я делаю, элемент управления браузера не отображается в представлении при запуске в качестве плагина. Однако это работает нормально при запуске в автономном режиме. Может кто-нибудь посоветовать, как идти?
1 ответ
Таким образом, я нашел основную причину, почему контроль не обнаруживался. Где-то в кодовой базе CEFGlue была следующая строка, которая заставляет его полностью пройти по визуальному дереву в поисках типа "Окно", чтобы получить дескриптор родительского окна и визуализировать пользовательский интерфейс элемента управления CEFBrowser.
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. Надеюсь, что это может помочь кому-то в подобных ситуациях.