2011-06-03 34 views
11

En mi aplicación WPF tengo muchos cuadros de diálogo personalizados que se abren para que el usuario pueda hacer varias cosas con . Para asegurarme de que el diálogo permanece en la parte superior de la ventana que lo llamó, agrego Topmost="True" a la etiqueta Window del archivo XAML del diálogo. Esto funciona, pero el cuadro de diálogo se muestra en cada ventana abierta, incluso en otras aplicaciones. Esto es realmente molesto Entonces, ¿hay alguna manera de obligar al diálogo a estar siempre en la parte superior de su principal, pero no necesariamente en la parte superior de otras aplicaciones?Mantener diálogos en la parte superior de la ventana, pero no en la parte superior de todo

Aquí es una versión simplificada de la etiqueta Window de los diálogos que tengo (omitiendo todas las cosas xmlns):

<Window 
mc:Ignorable="d" 
ShowInTaskbar="False" 
Topmost="True" 
WindowStartupLocation="CenterOwner" 
ResizeMode="NoResize" 
SizeToContent="WidthAndHeight" 
WindowStyle="ToolWindow"> 

Respuesta

22

Es necesario configurar el Owner del Dialog/Window y entonces será el arriba de solo esa ventana.

Por ejemplo:

var loginForm = new LoginForm(); 
loginForm.Owner = Application.Current.MainWindow; 
var success = loginForm.ShowDialog(); 

No establezca la propiedad TopMost en la ventana de lo contrario será en la parte superior de cada ventana.

+0

¡Hurra! ¡Comportamiento esperado! ¡Gracias! –

+0

La aplicación no parece tener una definición llamada "Actual". –

+0

También incluso si solo uso x.Owner = this; no funciona ShowDialogue siempre pone el diálogo donde sea que la ventana de la aplicación estaba en la pantalla una vez iniciada, no después de que se movió la ventana. –

Cuestiones relacionadas