2011-08-26 22 views
12

Tengo una ventana WPF que no cierro. En cambio, lo hago Ocultar() y Mostrar(). Ahora, cuando hago doble clic en mi ventana principal en una cuadrícula en un registro, que activará la ventana, la ventana siempre se mostrará detrás de la ventana principal. He probado el barbecho, pero sin éxito:WPF - Traer ventana al frente

view.Show(); 
view.Activate(); 
view.Topmost = true; 
view.Topmost = false; 
view.Focus();  

¿Hay otra manera que puedo utilizar para traer la ventana Absolut al frente? No puedo configurar MainWindow como propietario.

+1

Vas a tiene que dar más detalles sobre "No puedo configurar MainWindow como propietario". – vcsjones

+0

No estableceré MainWindow como propietario en mi vista porque no hay relación entre Windows. Y debería poder abrir muchas de estas ventanas. – BennoDual

+2

posible duplicado de [Traer una ventana al frente en WPF] (http://stackoverflow.com/questions/257587/bring-a-window-to-the-front-in-wpf) – CodeNaked

Respuesta

27

Window.Activate es el camino a seguir (si no desea configurar al propietario). Si esto no funciona (como usted describe), hay un error en otra ubicación. ¿Quizás su MainWindow tiene TopMost establecido en true? ¿O tiene una llamada diferida que enfoca su ventana principal o un control dentro?

Llamar a ShowDialog() como se propone en otra respuesta no es una opción a menos que desee que toda la aplicación esté bloqueada hasta que se cierre la ventana modal abierta.

Hay un error en el Win32-Api que también influye en la gestión de ventanas si WPF, pero la descripción de su problema no suena así.

Además aquí un truco, pero espero que no lo necesita:

Dispatcher.BeginInvoke(new Action(delegate {  
     view.Activate(); 
     }), System.Windows.Threading.DispatcherPriority.ContextIdle, null); 
+0

Gracias, solo esta solución solucionó el problema descrito para mí. – Sevenate

4

ShowDialog en lugar de Mostrar permitirá que la ventana siempre se muestre en la parte superior.

+0

+1 ¡Probablemente la respuesta! – CharithJ

+3

No creo que esta sea la respuesta, a menos que el OP quiera bloquear las otras ventanas siempre que la ventana adicional abierta esté abierta. Para mí, la pregunta no suena así. – HCL

+0

Quiere llevarlo a la cima, no hacerlo modelo. – Oli

2
myWindow.WindowState = WindowState.Normal; 

que trabajó para mí.

1

Tuve el mismo problema: estaba mostrando una ventana con el propietario establecido en NULL desde un evento MouseDoubleClick. Me di cuenta (con el tiempo) que necesitaba para establecer:

e.Handled = true

antes de terminada mi código de evento. El siguiente documento de Microsoft destaca que es posible que desee marcar un acontecimiento como controlado cuando responde de una manera "significativa y relativamente completa":

http://msdn.microsoft.com/en-us/library/ms747183.aspx

Ésta es subjetiva, pero en mi caso se impide la ventana Acabo de abrir de ser visible para el usuario.

1

Pasé por un problema similar y encontré una solución usando una combinación de las otras respuestas. Una vez que la ventana se oculte lo puse en el primer plano con el siguiente código:

view.WindowState = WindowState.Normal; 
    view.Activate(); 

Nota: Si la ventana se maximiza antes de esconderse, ese código haré volver como maximizado

+0

Esto funcionó para mí, y simplemente Activar no lo hizo. ¡Muchas gracias por la sugerencia! – ravuya

Cuestiones relacionadas