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. Надеюсь, что это может помочь кому-то в подобных ситуациях.

Другие вопросы по тегам