C# WPF创建同级窗口并关闭当前窗口
我需要的是窗口类中的事件处理程序C# WPF创建同级窗口并关闭当前窗口,c#,wpf,C#,Wpf,我需要的是窗口类中的事件处理程序 void someEventHandler(object sender, RoutedEventArgs e) { MyNewWindow mnw = new MyNewWindow(); mnw.Owner = Window.GetWindow(this); mnw.ShowDialog(); this.Close(); } GetWindow(此)返回当前窗口的父窗口 我原以为当新窗口的所有者是当前窗口的父窗口时,它会等待父
void someEventHandler(object sender, RoutedEventArgs e)
{
MyNewWindow mnw = new MyNewWindow();
mnw.Owner = Window.GetWindow(this);
mnw.ShowDialog();
this.Close();
}
GetWindow(此)返回当前窗口的父窗口
我原以为当新窗口的所有者是当前窗口的父窗口时,它会等待父窗口;而不是现在的。但它并没有这样做。当前窗口等待新窗口的执行,并仅在执行后关闭
如果出于某种原因使用Show()而不是ShowDialog(),则根本不显示窗口
可能我需要一些委托方法,但我不确定从哪里开始
编辑:我想我需要改进这个问题,以备将来参考:
新窗口应该是父窗口的对话框。如果我使用Show(),父窗口将变得可访问,我不希望这样。如果我使用ShowDialog(),它将成为当前窗口的一个对话框,这意味着当前窗口在新窗口关闭之前不会关闭,我也不希望这样。关闭窗口会导致它拥有的任何窗口 如果您只是希望所有者窗口不可见,请尝试此操作
void someEventHandler(object sender, RoutedEventArgs e)
{
MyNewWindow mnw = new MyNewWindow();
mnw.Owner = this;
this.Hide(); // not required if using the child events below
mnw.ShowDialog();
}
您可能希望在父窗口中连接一些事件,在关闭子窗口时,这些事件会根据您的需求相应地执行操作
编辑
你也许可以控制(多亲)对孩子的隐藏
void OnLoad(object sender, RoutedEventArgs e)
{
this.Owner.Hide();
}
void Closed(object sender, RoutedEventArgs e)
{
this.Owner.Show();
}
如果我了解您试图做什么,您希望关闭当前窗口并将其替换为MyNewWindow,该窗口是原始窗口的父窗口(可能是应用程序的主窗口)的子窗口 为此,您应使用:
mnw.Owner = this.Owner;
而不是调用GetWindow,它将返回当前窗口实例。GetWindow的目的是获取包含其他UIElement的窗口,如树下更远的按钮。传入窗口实例时,只需返回传入的内容。调用ShowDialog()
块。这意味着,只有当mnw
关闭时,该方法才会返回,并且只有在该时候原始窗口才会关闭
如果将其更改为Show()
,mnw
将在原始窗口上调用Close()
后立即关闭。因为Window.GetWindow(this)
返回this
。因此,您将所有者设置为this
,当您关闭this
时,mnw
也会关闭。这就给我们留下了:
MyNewWindow mnw = new MyNewWindow();
mnw.Owner = this.Owner; // may not be necessary
mnw.Show();
this.Close();
这段代码似乎适合我。在父窗口中处理这段代码将是最简单的解决方案。但是子窗口可以从各种其他窗口调用,这使得事情变得复杂。我需要修改每个父窗口中的事件处理程序,我不希望这样。顺便说一句。在ShowDialog()之前调用this.Hide()确保了一个解决方案。窗口没有关闭,但至少用户认为是这样:)你说得对。但我希望新窗口显示为主窗口的对话框。Show()和ShowDialog()都没有提供这种方式。当我调用Show()时,父窗口变得可访问。我希望新窗口是父窗口的对话框。