提问者:小点点

WPF window.owner不能使用window.show()


所以当我用

 Feed newfeed = new Feed(x);
 newfeed.Owner = this;
 newfeed.Show();
 this.Close();

它关闭第一个窗口,调试自动停止,没有错误。没有例外。但当我用

NewFeed.ShowDialog();

它打开第二个窗口,而不是关闭第一个窗口。

我想要的是关闭打开第一个窗口顶部的第二个窗口,然后关闭第一个窗口。


共1个答案

匿名用户

showDialog()将阻塞,直到对话框窗口关闭后才返回。

如果只想根据当前窗口的位置定位NewFeed窗口,可以将WindowStartupLocation设置为WindowStartupLocation.CenterOwner,然后将Owner属性设置回Null并在加载新窗口后立即关闭当前窗口:

Feed newfeed = new Feed(x);
newfeed.Owner = this;
newfeed.WindowStartupLocation = WindowStartupLocation.CenterOwner;
RoutedEventHandler eventHandler = null;
eventHandler += (ss, ee) =>
{
    newfeed.Loaded -= eventHandler;
    newfeed.Owner = null;
    this.Close();
};
newfeed.Loaded += eventHandler;
newfeed.Show();

您还可以将WindowStartupLocation设置为Manual,并自己计算和设置新窗口的lefttop属性。但是使用WindowStartupLocation.CenterOwner和事件处理程序(如上面的示例所示)可能更简单,并且仍然可以完成工作。