tutorial - wpf vs winforms
WPF WindowStartupLocation="CenterOwner" no es realmente central, y aparece por todas partes, ¿por qué? (3)
Bueno, this pregunta y this pregunta son similares pero no hay respuestas que funcionen. De hecho, esperaba que WindowStartupLocation = CenterOwner funcionara ... no funciona. Parece centrar la nueva ventana en el centro de una columna de la cuadrícula, no en el centro de la ventana principal. Así que asumo que piensa que es el padre. Segundo, cuando cierro el cuadro de diálogo y lo abro de nuevo, no está centrado sino que se mueve hacia abajo y hacia la derecha desde la posición anterior. Y si muevo la ventana principal a un segundo monitor, la ventana emergente aún se abre en el monitor predeterminado. ¿Estas propiedades están equivocadas o estoy pensando que debería funcionar de una manera diferente? Supongo que podría calcular las propiedades superior e izquierda manualmente. Solo quiero que la ventana emergente esté centrada en la ventana principal, sin importar dónde esté.
Probablemente porque no has establecido el propietario:
this.Owner = App.MainWindow; // for example
Así es como lo hago y centra la ventana perfectamente todo el tiempo.
Para ampliar lo que Will Eddins comentó, puedes crear un método de sobrecarga para ShowDialog () o Show () en tu ventana:
public void ShowDialog(Window owner)
{
this.Owner = owner;
this.ShowDialog();
}
public void Show(Window owner)
{
this.Owner = owner;
this.Show();
}
O sobrecargar un constructor:
public MyWindow(Window owner)
: this()
{
this.Owner = owner;
}
Si creas una extensión para esto, podrías reutilizar esta buena idea:
/// <summary>
/// Opens a window modally, with an owner
/// </summary>
/// <param name="window">The window to open</param>
/// <param name="opener">The owner of the window getting opened</param>
/// <returns>window.ShowDialog()</returns>
public static bool? ShowDialog(this Window window, Window opener)
{
window.Owner = opener;
return window.ShowDialog();
}
Tuve el mismo problema ... pero se debió principalmente al hecho de que, cuando quise deshacerme de la ventana secundaria, usé hide()
lugar de close()
... así que cuando la vuelves a abrir, porque estaba oculto y no cerrado, cuando se mueve la ventana principal, aún se abre en su ubicación de inicio ...
Entonces, cuando cierre la ventana secundaria en lugar de ocultarla, por ejemplo, cuando termine de trabajar con ella.