Элемент управления WPF не отображается в ElementHost в приложении WinForms

у меня проблема с элементом управления WPF, который я пытаюсь разместить в ElementHost в приложении WinForms. Элемент управления-это внешний пользовательский элемент управления, который я первоначально разработал в отдельном тестовом проекте, который был приложением WPF. Там он, очевидно, работает нормально, но в моем приложении WinForms все, что я получаю, это пустое серое поле, где отображается ElementHost.

вот мой код C# для создания, заполнения и добавления ElementHost в родительский элемент управления:

// This is my WPF control
m_TabHostPanel  = new TabHostPanel();
m_ElementHost  = new ElementHost
                 {
                     Child = m_TabHostPanel,
                     Dock = DockStyle.Top,
                     Height = 34
                 };
this.Controls.Add( m_ElementHost );

родитель элемент управления содержит другие элементы управления WinForms, которые добавляются и удаляются во время выполнения по мере необходимости. Все они размещаются отдельно с док-станцией, установленной в DockStyle.Заполнить. Таким образом, каждый раз, когда я добавляю один, я отправляю ElementHost в заднюю часть Z-порядка, чтобы убедиться, что он правильно отображает:

m_ElementHost.SendToBack();

единственное, о чем я задумался, это: в оригинальном проекте стили для всех моих lookless элементов управления были объединены в словарь ресурсов для приложения в приложении.xaml, например:

<Application x:Class="WpfTestApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Application/UserInterface/DataTemplates/TabModelDataTemplate.xaml"/>
                <ResourceDictionary Source="Application/UserInterface/Styles/HoverablePressableButtonStyle.xaml"/>
                <ResourceDictionary Source="Application/UserInterface/Styles/MiniControlButtonStyle.xaml"/>
                <ResourceDictionary Source="Application/UserInterface/Styles/TabCloseButtonStyle.xaml"/>
                <ResourceDictionary Source="Application/UserInterface/Styles/TabScrollLeftButtonStyle.xaml"/>
                <ResourceDictionary Source="Application/UserInterface/Styles/TabScrollRightButtonStyle.xaml"/>
                <ResourceDictionary Source="Application/UserInterface/Styles/TabListDropDownButtonStyle.xaml"/>
                <ResourceDictionary Source="Application/UserInterface/Styles/TabHostComboBoxStyle.xaml"/>
                <ResourceDictionary Source="Application/UserInterface/Styles/TabButtonStyle.xaml"/>
                <ResourceDictionary Source="Application/UserInterface/Styles/TabHostPanelStyle.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

Я перенес приложение.xaml для моего проекта WinForms, но действие сборки имеет значение Page. Если я установил его в ApplicationDefinition, я получаю сообщение об ошибке, что приложение имеет несколько точек входа, что имеет смысл, но мне интересно, если стили и т. д. их забирают. Если нет, это может объяснить, почему я получаю пустой серый прямоугольник, где должен быть мой контроль, потому что без эти, нет ничего, чтобы определить его внешний вид. Поэтому, возможно, вопрос в том, как получить эти стили в приложение WinForms, чтобы мои элементы управления WPF могли их видеть?

Я, вероятно, также должен упомянуть, что это работает на .NET Fx 3.5.

В любом случае, пока я озадачен, поэтому любая помощь будет с благодарностью принята.

большое спасибо!

Барт

1 ответов


Спасибо за ответ, но я думаю, вы можете неправильно меня понять: я пытаюсь использовать пользовательский элемент, ресурсы которого обычно находятся в объекте приложения, а не вставлять само приложение в ElementHost.

к счастью, я нашел ответ:

http://drwpf.com/blog/2007/10/05/managing-application-resources-when-wpf-is-hosted/

короткая версия:

  • установить действие сборки для приложения.xaml для Страница
  • в коде позади для приложения.xaml создает конструктор по умолчанию, который просто вызывает InitializeComponent ()
  • когда приложение WinForms запускается, просто создайте экземпляр класса App.

и тогда все хорошо: мой элемент управления WPF отображается так, как должен.

теперь, почему я только нахожу ответ после я отправил в StackOverflow?

еще раз спасибо,

Барт