【问题标题】:How to close current window (in Code) when launching new Window启动新窗口时如何关闭当前窗口(在代码中)
【发布时间】:2020-07-23 00:11:29
【问题描述】:
SignInWindow signIn= new SignInWindow();
signIn.ShowDialog();

以上代码在我的 MainWindow 类中。

当显示新窗口时,我希望关闭当前窗口。最好的方法是什么?

我的应用程序是 C# WPF 应用程序


我已经尝试过了,但是当它被调用时,我的应用程序退出了

    static private void CloseAllWindows()
    {
        for (int intCounter = App.Current.Windows.Count - 1; intCounter >= 0; intCounter--)
            App.Current.Windows[intCounter].Close();
    }

【问题讨论】:

  • 在你的窗口中关闭... this.Close();或引用 thatWindow.Close();

标签: c# wpf xaml


【解决方案1】:

这样做:

this.Close();
SignInWindow signIn = new SignInWindow();
signIn.ShowDialog();

请记住,这实际上会关闭MainWindow。如果您真的只想隐藏它,那么请执行以下操作:

this.Hide();
SignInWindow signIn = new SignInWindow();
signIn.ShowDialog();
this.Show();

这将在登录表单打开时隐藏MainWindow,然后在完成后再次显示


好的,显然您是从表单外部static class 启动此表单。那将是非常相关的信息。但解决方案是这样的:

var w = Application.Current.Windows[0];
w.Hide();

SignInWindow signIn = new SignInWindow();
signIn.ShowDialog();

w.Show();

【讨论】:

  • 'this' 在 WPF 中不起作用。我已经考虑过了,因为我以前在 WinForm 中这样做。
  • @softwareisfun “'this' 在 WPF 中不起作用”是什么意思? this 关键字是 C# 语言功能,完全独立于您是否使用 WPF。它指的是调用它的类的当前实例。
  • 错误 1 ​​关键字“this”在静态属性、静态方法或静态字段初始化程序中无效
  • 这是我在新创建的 XAML 文件中键入它时出现的错误。 (除 Microsoft Visual Studio 2010 生成的代码外,没有其他代码)
  • @softwareisfun,这是一个真正模糊的问题。我对这个其他类一无所知。我也不知道您是否可以注入引用或者是否必须恢复它。在这一点上,这听起来像是一个完全不同的问题。
【解决方案2】:

你可以试试这个:

SignInWindow signIn= new SignInWindow();
Application.Current.Windows[0].Close();
signIn.ShowDialog();

【讨论】:

  • 我这样做了,应用程序退出了。我不是 100% 确定,但似乎如果我退出 MainWindow,应用程序就会停止。无论如何要阻止这一切?
【解决方案3】:

这是一种重定向代码。它将关闭当前窗口/页面并重定向到 wpf 中的新页面/窗口

SignWindow sw = new SignWindow();
this.Content = sw;

【讨论】:

  • 我真的很喜欢这种方法,但我希望它适用于 Window。它可能适用于用户控件,但如果你尝试设置一个窗口,你可能会得到 InvalidOperationException : 'Window must be the root of the tree。无法将 Wndow 添加为 Visual' 的子级。
【解决方案4】:

Mike Perrenoud 的回答是 100% 完美,尽管您可能希望在关闭主窗口之前创建新窗口的对象并激活它。

【讨论】:

  • 这可能更适合对“100% 正确”的答案发表评论,或者作为编辑。
  • 我的声誉不是 50 可以评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 2022-07-02
  • 1970-01-01
相关资源
最近更新 更多