2011-09-29 42 views
8

WPF realmente me está quitando los nervios aquí. Configuré una ventana emergente con un contenido complejo (cuadrícula, botones, etc.). Establecí su propiedad StaysOpen en False e IsOpen en True en un evento de vista previa de MouseDown de cuadro de texto.Ventana emergente nunca se cierra

cosa Ths es que abre pero nunca se cierra al hacer clic en cualquier lugar fuera de la ventana.

¿Alguna sugerencia?

Gracias!

ACTUALIZACIÓN:

Mi emergente tiene botones en el interior. Cuando hago clic en una de esas, la ventana emergente se cierra cuando hago clic fuera de ella. ¿Le están pasando cosas raras al enrutamiento de eventos?

+0

¿Lo has probado cerrar manualmente como ¿tiene algún botón de cierre en él? o mapee una tecla como ESC para borrar la ventana emergente. –

+0

Puedo hacerlo así ... pero necesito que se cierre automáticamente al perder el foco. –

+0

¿Puedes agregar XAML simple que demuestre este problema (puede ayudarte a depurar también)? –

Respuesta

4

Parece que la ventana emergente no se cerrará si se abre por cualquier otro evento de control. Acabo de vincular la propiedad IsOpen a la propiedad IsChecked de un ToggleButton para simular un combobox.

Gracias por todas sus respuestas.

+0

Estoy de acuerdo, lo mismo funcionó para mí. Comportamiento extraño, pero funcionó. Creado un enlace para el IsOpenProperty en el código para un botón de alternar la propiedad IsChecked y funcionó bien. Me lo llevo :) – TravisWhidden

0

Configuré IsOpen en un evento textbox MouseDown preview.

Conjunto para qué? ¿Y dónde está alojado TextBox?

Solo puedo adivinar con la escasa información provista, pero diría que cuando hace clic fuera del Popup, su controlador de eventos lo activa y lo vuelve a abrir.

+0

El cuadro de texto está dentro de un control de usuario que se utiliza en una ventana. En el control de usuario estoy configurando IsOpen = true cada vez que se hace clic en el cuadro de texto. Cuando la ventana emergente pierde el foco, nunca se cierra. –

0

Puede utilizar LostFocus caso de la ventana emergente. Si el foco no está dentro de la ventana emergente, configure su IsOpen en falso para cerrarlo.

+0

No hace nada. Si inicio la ventana con la propiedad emergente IsOpen establecida en verdadero, funciona normalmente. Si lo configuro en el evento textbox PreviewMouseButtonDown, no funciona. –

0

también estaba teniendo este problema, excepto en el caso PreviewMouseButtonUp de un botón. La suposición de que hay algún error con Popups y de intentar abrirlos en los eventos de Tunneling fue precisa y me llevó por el camino a mi solución (que es un poco más genérica).

Necesitaba resolver esto (el control del host era genérico/podría haber varios tipos de controles) al escuchar el evento de burbujeo en lugar del evento de túnel, específicamente con el método AddHandler(RoutedEvent,Delegate,Boolean) para capturar eventos manejados.

WAG el problema está en algún punto durante la transición de un túnel a burbujear.

0

que use el código detrás para inicializar emergente, y me he dado cuenta que no se cierra si corrió sincronización desde otra acción de interfaz de usuario como evento de ratón. Para solucionar esto ejecutarlo asíncrono:

public static void ShowPopupMessage(string message) 
    { 
     DispatcherHelper.UIDispatcher.BeginInvoke(new Action(() => 
     { 
      var popup = new Popup 
      { 
       Child = new AutoHideMessage(message), 
       StaysOpen = false, 
       IsOpen = true 
      }; 
     })); 
    } 
Cuestiones relacionadas