Domanda

Ho un problema con un controllo WPF che sto cercando di ospite in un ElementHost in un'applicazione WinForms. Il controllo è un controllo lookless personalizzato che ho originariamente sviluppato in un progetto di test separato, che era un'applicazione WPF. Lì funziona ovviamente bene, ma nei miei WinForms App tutto quello che ottiene è una casella grigia vuota in cui viene visualizzata l'ElementHost.

Ecco il mio codice C # per la creazione, la compilazione, e aggiungendo l'ElementHost al genitore di controllo:

// 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 );

Il controllo padre contiene altri WinForms controlli che vengono aggiunti e rimossi in fase di esecuzione, a seconda delle necessità. Questi sono tutti ospitati singolarmente con il loro set dock a DockStyle.Fill. Così, ogni volta aggiungo uno io mando l'ElementHost alla parte posteriore della Z-fine di assicurarsi che essa rende in modo corretto:

m_ElementHost.SendToBack();

Quindi, io so che non sono in esecuzione in un problema dello spazio aereo, o qualcosa di simile.

L'unica cosa che ho fatto chiedo e 'questo: nel progetto originario gli stili per tutti i miei controlli lookless sono state fuse nel dizionario risorse per l'applicazione in App.xaml, in questo modo:

<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>

Ho migrato App.xaml al mio progetto WinForms, ma l'azione di compilazione è impostato alla pagina. Se ho impostato a ApplicationDefinition ottengo un errore che dice che l'applicazione ha molteplici punti di entrata, che ha un senso, ma mi chiedo allora se gli stili, ecc, vengono raccolti. Se non questo potrebbe spiegare perché sto ottenendo un rettangolo grigio bianco dove il mio controllo dovrebbe essere perché, senza questi, non c'è niente per definire il suo look. Così forse la domanda è: come faccio ad ottenere questi stili nella mia applicazione WinForms in modo che i miei controlli WPF può vederli?

I probabilmente dovrebbe anche ricordare che questo è in esecuzione su .NET Fx 3.5.

In ogni caso, per ora sto perplesso, in modo che qualsiasi aiuto sarebbe ben accetto.

Molte grazie!

Bart

È stato utile?

Soluzione

Grazie per la risposta, ma penso che potrebbe fraintendermi:. Sto cercando di utilizzare un elemento personalizzato, le cui risorse sono normalmente in all'oggetto Application, Non inserire la stessa applicazione nella ElementHost

Per fortuna, ho trovato una risposta:

http: // drwpf .com / blog / 2007/10/05 / gestione-Application-risorse-quando-WPF-è-hosted /

Versione corta:

  • Imposta l'azione di build per App.xaml alla pagina
  • Nel codice dietro per App.xaml creare un costruttore di default che appena chiama InitializeComponent ()
  • Quando l'applicazione WinForms si avvia, basta creare un'istanza della classe App.

E poi va tutto bene:. I miei appare controllo WPF come dovrebbe

Ora, perché è solo che trovo la risposta dopo ho inviato a StackOverflow?

Grazie ancora,

Bart

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top