none
No se activa ComboBox de WPF dentro de WinForm RRS feed

  • Pregunta

  • Hola!!  Que tal??

    Antes que nada, GRACIAS! por leer este problema:

    En un formulario de Windows, tengo colocados 2 páneles (llamémosles panel 1 y panel 2), dentro de los cuales coloco más WinForms.

     Dentro de los  WinForms colocados ahí, tengo alojados  controles de usuario de WPF (específicamente  un ComboBox). En la ejecución del programa, habilito y deshabilito el panel 2 varias veces (al hacerlo, el formulario contenido queda inaccesible), el panel 1 casi siempre está activo. El problema es el siguiente: al activar el panel 2 y cargarle un nuevo formulario, los controles de usuario de WPF que tengo alojados dentro de ese formulario, no responden, es decir, ni siquiera cambian de color cuando el mouse pasa sobre ellos,  aún y cuando los controles de usuario que se encuentran en el formulario del panel 1 y todos los demás controles del formulario en el panel 2 responden perfectamente. Aclaro que para ambos formularios, el código que le implemento a los controles de usuario, es exactamente el mismo.

    Alguien tiene alguna idea de lo que sucede??

    De antemano, Agradezco sus respuestas!!

    viernes, 26 de febrero de 2010 19:08

Respuestas

  • Hola Sandro!! Gracias por responder...

    Si, la aplicación es de Windows Form, y creo que diferimos en algo: Si se pueden colocar controles de WPF en Windows Form. El procedimiento es similar al que mencionaste para WPF: Se añade al proyecto un UserControl y se selecciona un Control de WPF, en la ventana que abre de WPF, se coloca el control que se desee utilizar, se compila el proyecto, y al terminar, ya se puede utilizar dicho control en el WinForm, claro está que, como mencionaste, se debe incluir dentro de un ElementHost.  :D

    Pero continuando con la pregunta, creo que ya resolvi el problema, no se si sea la mejor forma, y estoy segura que puede haber una mejor solución, pero por el momento, me ha ayudado bastante:

    Exactamente después de habilitar el panel 2 (dentro del formulario que tengo colocado ahi), creo nuevamente mediante código los ElementHost que contienen los combos de WPF.

    //Este es el ejemplo del código que usé...
    WPFComboBox comboWPF = new WPFComboBox();  // WPFComboBox es el nombre del control de usuario de WPF
    formularioPrincipal.panel2.Enabled = true; //Código para activar el panel 2
    frmEnPanel2.Controls.Remove(eHost); 
    eHost = new ElementHost();
    eHost.Child = comboWPF;
    frmActivo.Controls.Add(eHost);

    Repito, no se si sea la mejor forma, pero a mi me ha funcionado...

    Saludos a todos!!!...
    lunes, 1 de marzo de 2010 18:46

Todas las respuestas

  •  Cecy, estas creando una aplicación WPF o Windows?
    Si estas en una aplicación windows el problema esta ahí ya que no se pueden usar controles de WPF en Windows Form. Si podes usar controles de Windows Form en aplicaciones WPF.
    Para esto tenes que crear un host que será el contenedor de los controles winform y ahí adentro pones tus controles windows.

    Si necesitas ayuda para hacer el hosting de los controles sobre WPF aca de dejo un link que te va a ser de utilidad.
    http://msdn.microsoft.com/en-us/library/ms742875.aspx

    Saludos,

    Sandro D. Garcia
    Colabora con el foro: Si este mensaje te es de utilidad marcalo como respuesta.
    -----
    Please, if this message helps you, remember mark it as response, may be can help more people with same problem.
    -----
    Mi Blog
  • Hola Sandro!! Gracias por responder...

    Si, la aplicación es de Windows Form, y creo que diferimos en algo: Si se pueden colocar controles de WPF en Windows Form. El procedimiento es similar al que mencionaste para WPF: Se añade al proyecto un UserControl y se selecciona un Control de WPF, en la ventana que abre de WPF, se coloca el control que se desee utilizar, se compila el proyecto, y al terminar, ya se puede utilizar dicho control en el WinForm, claro está que, como mencionaste, se debe incluir dentro de un ElementHost.  :D

    Pero continuando con la pregunta, creo que ya resolvi el problema, no se si sea la mejor forma, y estoy segura que puede haber una mejor solución, pero por el momento, me ha ayudado bastante:

    Exactamente después de habilitar el panel 2 (dentro del formulario que tengo colocado ahi), creo nuevamente mediante código los ElementHost que contienen los combos de WPF.

    //Este es el ejemplo del código que usé...
    WPFComboBox comboWPF = new WPFComboBox();  // WPFComboBox es el nombre del control de usuario de WPF
    formularioPrincipal.panel2.Enabled = true; //Código para activar el panel 2
    frmEnPanel2.Controls.Remove(eHost); 
    eHost = new ElementHost();
    eHost.Child = comboWPF;
    frmActivo.Controls.Add(eHost);

    Repito, no se si sea la mejor forma, pero a mi me ha funcionado...

    Saludos a todos!!!...
    lunes, 1 de marzo de 2010 18:46
  • Hola Cecy.

    No tengo muy claro como tienes los paneles y no he podido replicar el comportamiento.

    Tienes una aplicacion WinForms con 2 Panels, dentro de estos paneles vas insertando o eliminando controles de usuario WinForms que a su vez contienen Controles de usuario WPF y otros controles WinForms.

    ¿Eso es asi?.
    Intento replicar el problema por curiosidad pero no consigo un mal comportamiento.

    Saludos
    David González
    martes, 2 de marzo de 2010 7:33