Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF创建同级窗口并关闭当前窗口_C#_Wpf - Fatal编程技术网

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()时,父窗口变得可访问。我希望新窗口是父窗口的对话框。