创建兄弟窗口并关闭当前窗口

本文关键字:窗口 兄弟 创建 | 更新日期: 2023-09-27 18:01:49

我需要的是这样一个事件处理程序在我的窗口类。

void someEventHandler(object sender, RoutedEventArgs e)
{
    MyNewWindow mnw = new MyNewWindow();
    mnw.Owner = Window.GetWindow(this);
    mnw.ShowDialog();
    this.Close();
}

window. getwwindow (this)返回当前窗口的父窗口。

我曾经认为当新窗口的所有者是当前窗口的父窗口时,它会等待父窗口;而不是现在这个。但事实并非如此。当前窗口等待new命令的执行,执行完后才关闭。

如果我使用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;

而不是调用getwwindow,后者会返回当前的Window实例。getwwindow的目的是获取包含一些其他元素的窗口,比如树中更远的按钮。当传入一个Window实例时,您只会得到传入的内容。

调用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();