Search code examples
wpf

WPF WindowStartupLocation="CenterOwner" not really center, and pops all over, why?


Well this question and this question are similar but no answers that work. In fact I was hoping WindowStartupLocation=CenterOwner would work...it doesn't. It seems to center the new window in the center of a grid column, not the center of the main window. So I'm assuming it thinks that is the parent. Second when I close the dialog and open it again it is not centered but moved down and right from the previous position. And if I move the main window to a second monitor the popup still opens on the default monitor. Are these properties wrong or am I just thinking it should work in a different way. I suppose I could calculate the Top and Left properties manually. I just want the popup to be centered in the main window no matter where it is.


Solution

  • Probably because you didn't set the owner:

    this.Owner = App.MainWindow; // for example
    

    That's how I do it and it centers the window perfectly all the time.

    To extend on what Will Eddins commented, you could create an overload method for ShowDialog() or Show() in your Window:

    public void ShowDialog(Window owner)
    {
        this.Owner = owner;
        this.ShowDialog();
    }
    
    public void Show(Window owner)
    {
        this.Owner = owner;
        this.Show();
    }
    

    Or overload a constructor:

    public MyWindow(Window owner)
        : this()
    {
        this.Owner = owner;
    }