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.
views:
79answers:
1
+2
A:
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;
}
Carlo
2010-08-10 19:57:32
Alternatively, set the owner before you call `.Show()` or `.ShowDialog()` on the window: `window.Owner = this;`
Will Eddins
2010-08-10 19:59:18
Doh, you have to be kidding me. That has bit me before in winforms. Damned thing. Can't you default your owner to whom ever instantiated you?
nportelli
2010-08-10 20:46:55
Haha you could create a constructor overload that takes the owner, I will add an example in the answer.
Carlo
2010-08-10 21:02:12
@nportelli: How would the Window know who instantiated it without passing a reference to the new Window? It'd be some voodoo magic!
rossisdead
2010-08-12 21:42:41