c# - WPF 创建同级窗口并关闭当前窗口

标签 c# wpf

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

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

Window.GetWindow(this) 返回当前窗口的父窗口。

我本来想当新窗口的所有者是当前窗口的父窗口时,它会等待父窗口;而不是当前的。但它不是那样工作的。当前窗口等待新的执行并仅在之后关闭。

如果出于某种原因我使用 Show() 而不是 ShowDialog(),则窗口根本不会显示。

可能我需要一些委托(delegate)方法,但我不确定从哪里开始。

编辑:我想我需要改进这个问题以备将来引用: 新窗口应该是父窗口的对话框。如果我使用 Show() 父窗口变得可访问,我不希望这样。如果我使用 ShowDialog(),它会成为当前窗口的对话框,这意味着当前窗口在新窗口关闭之前不会关闭,我也不希望这样。

最佳答案

关闭窗口会导致它拥有的所有窗口 to be closed .

如果你只是想让所有者窗口不可见,试试这个;

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();
}

您可能希望在父窗口中连接一些事件,当您根据您的要求关闭子窗口时,这些事件会相应地起作用。

编辑

您也许可以控制对 child 隐藏(多个 parent );

void OnLoad(object sender, RoutedEventArgs e)
{
  this.Owner.Hide();
}
void Closed(object sender, RoutedEventArgs e)
{
  this.Owner.Show();
}

关于c# - WPF 创建同级窗口并关闭当前窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6672187/

相关文章:

c# - LINQ 风格的 IS IN 查询

c# - 使用包装的语言资源 Xamarin Forms 更改语言运行时

c# - 将 EventSystem 用于按键事件

c# - 有没有办法让 XmlDocument 解析不那么严格

javascript - 如何在没有 Blazor Web 组件的情况下从 JavaScript 使用 C# WebAssemly

c# - 不等待消息框的结果

c# - 将单个 WPF 控件绑定(bind)到多个项目

c# - MVVM 绑定(bind)到属性 == Null

c# - Winform 和 WPF 表单/窗口边框

wpf - 为什么在 WPF 中启动窗口需要一些时间才能出现?