J'ai un problème avec un contrôle WPF que j'essaie d'héberger dans un ElementHost dans une application WinForms. Le contrôle est un contrôle personnalisé sans apparence que j'ai initialement développé dans un projet de test distinct, qui était une application WPF. Là, ça fonctionne évidemment bien, mais dans mon application WinForms, tout ce que je reçois est une boîte grise vide où l'ElementHost est affiché.Le contrôle WPF ne s'affiche pas dans ElementHost dans l'application WinForms
Voici mon code C# pour la création, le remplissage, et en ajoutant le ElementHost au contrôle parental:
// 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);
Le contrôle parent contient d'autres contrôles WinForms qui sont ajoutés et supprimés lors de l'exécution, au besoin. Ceux-ci sont tous hébergés individuellement avec leur dock fixé à DockStyle.Fill. Ainsi, chaque fois que j'ajouter que j'envoyer le ElementHost à l'arrière de l'ordre Z pour vous assurer qu'il rend correctement:
m_ElementHost.SendToBack();
Ainsi, je sais que je ne suis pas en cours d'exécution dans un problème de l'espace aérien, ou quelque chose comme cette.
La seule chose que je me suis demandé au sujet est la suivante: dans le projet original des styles pour tous mes contrôles lookless ont été fusionnés dans le dictionnaire de ressources pour l'application dans App.xaml, comme ceci:
<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>
I J'ai migré App.xaml vers mon projet WinForms, mais l'action build est définie sur Page. Si je le mets à ApplicationDefinition, j'obtiens une erreur en disant que l'application a plusieurs points d'entrée, ce qui est logique, mais je me demande alors si les styles, etc., sont pris en compte. Si ce n'est pas le cas, cela pourrait expliquer pourquoi je reçois un rectangle gris vide où mon contrôle devrait être, car sans cela, il n'y a rien pour définir son apparence. Alors peut-être la question est, comment puis-je obtenir ces styles dans mon application WinForms afin que mes contrôles WPF peuvent les voir?
Je devrais probablement aussi mentionner que cela fonctionne sur .NET Fx 3.5.
Quoi qu'il en soit, pour l'instant je suis perplexe, donc toute aide serait la bienvenue.
Merci beaucoup!
Bart
comment créer une nouvelle instance de la classe App? – Prof
Vous pouvez simplement le remplacer. –