Хорошо этот вопрос и этот вопрос похожи, но ответы не работают. На самом деле я надеялся, что WindowStartupLocation = CenterOwner сработает ... это не так. Кажется, что новое окно центрируется в центре столбца сетки, а не в центре главного окна. Так что я предполагаю, что думает, что это родитель. Во-вторых, когда я закрываю диалог и открываю его снова, он не центрируется, а перемещается вниз и вправо от предыдущей позиции. И если я перенесу главное окно на второй монитор, всплывающее окно все равно откроется на мониторе по умолчанию. Являются ли эти свойства неправильными, или я просто думаю, что это должно работать по-другому. Я полагаю, я мог бы рассчитать свойства Top и Left вручную. Я просто хочу, чтобы всплывающее окно было сосредоточено в главном окне независимо от того, где оно находится.
Вероятно, потому что вы не установили владельца:
this.Owner = App.MainWindow; // for example
Вот как я это делаю, и он все время идеально центрирует окно.
Чтобы расширить то, что прокомментировал Уилл Эддинс, вы можете создать метод перегрузки для ShowDialog () или Show () в своем окне:
public void ShowDialog(Window owner)
{
this.Owner = owner;
this.ShowDialog();
}
public void Show(Window owner)
{
this.Owner = owner;
this.Show();
}
Или перегрузить конструктор:
public MyWindow(Window owner)
: this()
{
this.Owner = owner;
}