2010-12-01 12 views
9

Tengo un problema con un control WPF que estoy tratando de alojar en un ElementHost en una aplicación WinForms. El control es un control personalizado sin apariencia que desarrollé originalmente en un proyecto de prueba separado, que era una aplicación de WPF. Ahí obviamente funciona bien, pero en mi aplicación WinForms todo lo que obtengo es un cuadro gris en blanco donde se muestra ElementHost.El control WPF no se muestra en ElementHost en la aplicación WinForms

Aquí está mi código C# para crear, llenar, y añadiendo el ElementHost al control primario:

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

El control principal contiene otros controles Windows Forms que se agregan y quitan en tiempo de ejecución, según sea necesario. Todos están alojados individualmente con su Dock configurado en DockStyle.Fill. Por lo tanto, cada vez que añado que yo envíe la ElementHost a la parte posterior de la Z-fin de asegurarse de que se hace correctamente:

m_ElementHost.SendToBack(); 

Por lo tanto, sé que no estoy corriendo en un problema de espacio aéreo, ni nada ese.

La única cosa que me preguntaba acerca es la siguiente: en el proyecto original de los estilos para todos mis controles lookless se fusionaron en el diccionario de recursos para la aplicación en App.xaml, así:

<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 he migrado App.xaml a mi proyecto WinForms, pero la acción de compilación está configurada en Página. Si lo configuro en ApplicationDefinition, aparece un error que dice que la aplicación tiene múltiples puntos de entrada, lo que tiene sentido, pero me pregunto si los estilos, etc., se están recogiendo. Si no, esto podría explicar por qué estoy obteniendo un rectángulo gris en blanco donde mi control debería ser porque, sin estos, no hay nada para definir su aspecto. Entonces, tal vez la pregunta es, ¿cómo puedo obtener estos estilos en mi aplicación WinForms para que mis controles WPF puedan verlos?

Probablemente también debería mencionar que esto se está ejecutando en .NET Fx 3.5.

De todos modos, por ahora estoy perplejo, por lo que cualquier ayuda sería recibida con gratitud.

¡Muchas gracias!

Bart

Respuesta

10

gracias por responder, pero creo que es posible que me malinterpreten: Estoy tratando de utilizar un elemento personalizado, cuyos recursos son normalmente en el objeto de aplicación, no inserte la propia aplicación en el ElementHost.

Afortunadamente, he encontrado una respuesta:

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

versión corta:

  • Conjunto de Acción de generación de App.xaml a la página
  • En el código detrás de la aplicación. xaml crea un constructor predeterminado que solo llama a InitializeComponent()
  • Cuando se inicia la aplicación WinForms, solo crea una instancia de A clase de pp

Y entonces está todo bien: mi control WPF aparece como debería.

Ahora, ¿por qué solo encuentro la respuesta después de que he publicado en StackOverflow?

Gracias de nuevo,

Bart

+0

¿Cómo se crea una nueva instancia de la clase de aplicaciones? – Prof

+0

Puedes simplemente reactivarlo. –

Cuestiones relacionadas