WPF WindowStartupLocation = «CenterOwner» на самом деле не по центру, а всплывает повсюду, почему?

Хорошо этот вопрос и этот вопрос похожи, но ответы не работают. На самом деле я надеялся, что WindowStartupLocation = CenterOwner сработает ... это не так. Кажется, что новое окно центрируется в центре столбца сетки, а не в центре главного окна. Так что я предполагаю, что думает, что это родитель. Во-вторых, когда я закрываю диалог и открываю его снова, он не центрируется, а перемещается вниз и вправо от предыдущей позиции. И если я перенесу главное окно на второй монитор, всплывающее окно все равно откроется на мониторе по умолчанию. Являются ли эти свойства неправильными, или я просто думаю, что это должно работать по-другому. Я полагаю, я мог бы рассчитать свойства Top и Left вручную. Я просто хочу, чтобы всплывающее окно было сосредоточено в главном окне независимо от того, где оно находится.

51
задан Community 23 May 2017 в 02:10
поделиться

1 ответ

Вероятно, потому что вы не установили владельца:

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;
}
78
ответ дан 7 November 2019 в 10:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: