2009-07-27 12 views
6

Estoy alojando el control windowsforms en WPF popup. Problemas a continuación:WPF Popup y WindowsFormsHost Problema

  1. Si realizo StaysOpen = False no puedo interactuar con el control de winform. StaysOpen to false es obligatorio porque cuando se hace clic fuera de la región emergente, debe cerrarse.
  2. si realizo StaysOpen = True, puedo interactuar con el control de winform, pero cuando hago clic fuera del área emergente, no se cierra.
  3. Intenté configurar StaysOpen = verdadero en MouseEnter de ventana emergente y StaysOpen = False en MouseLeave, pero MouseLeave se dispara como y cuando el mouse está sobre el control winform dando como resultado un comportamiento inesperado.
  4. Incluso probé la propiedad de ventana emergente de IsMouseCaptureWithin y encontré que no funciona con winforms (supongo que es un error en el marco).

  5. Otro problema, estaba tratando de cerrar ventana emergente cuando el formulario principal raíz (que es forma de Windows) está desactivado (presionó Alt + Tab), pero este evento (desactivar) se dispara incluso cuando entro en uno de los controles en windowshostControl en ventana emergente.

comportamiento deseado:

  1. debe ser capaz de acoger e interactuar con el control WinForm en WPF emergente.
  2. al hacer clic en fuera del área de ventana emergente, la ventana emergente debe cerrarse.

Apreciar cualquier entrada.

Gracias.

Respuesta

2

He tenido muchos problemas con las ventanas emergentes estándares de WPF, porque de hecho son una nueva ventana con su propio identificador. Esto significa que si arrastra su aplicación por la pantalla, la ventana emergente se queda allí (no se mueve con su ventana). También significa que su ventana emergente tiene comportamientos extraños y no interactúa con su aplicación de la manera en que normalmente lo hacen otros controles.

He creado 2 clases decorador para hacer frente a este problema:

PopupDecorator.cs y TimeoutPopupDecorator.cs

Es muy sencillo de usar:

  1. adjuntar una declaración de espacio de nombres para las nuevas clases emergentes . es decir,

    xmlns: dday_wpf = "clr-namespace: DDay.WPF"

  2. envolvente del área que desea la ventana emergente para poder ser visualizado con el decorador. es decir

    < dday_wpf: PopupDecorator x: Name = "popup"> < dday_wpf: PopupDecorator.Popup> ... contenido del emergente van aquí ... < /dday_wpf:PopupDecorator.Popup> ... contenido del panel ir aquí ... </dday_wpf: PopupDecorator>

Funciona más o menos idéntica a una normal Popup partir de ese momento.

Esto puede no resolver todos sus problemas, pero espero que ayude.

+0

¿Puede darnos algunos enlaces actualizados? –

+0

No hay problema, he actualizado los enlaces para que apunten a la ubicación correcta ahora. – Doug

0

Esto suena un poco como mi problema al iniciar un control de forma de winless desde un formulario WPF.

Mira mi pregunta Why is my WPF textbox "kinda" readonly?.

El hecho de ser justo, basado en lo que Doug dijo acerca de las ventanas emergentes con su propio identificador, hace que esto sea aplicable.