【问题标题】:Closing a secondary window completely完全关闭辅助窗口
【发布时间】:2013-01-23 18:28:15
【问题描述】:

似乎第二个窗口没有关闭。这就是我正在做的......

  • 我创建了一个新的 WPF 项目。

  • 我在主窗口中放置了一个按钮。

  • 我将以下代码放在按钮中以启动第二个窗口并隐藏主窗口。

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        var projectWindow = new NewProjectInfo();
        this.Hide();
        projectWindow.Show();
    }
    

-新窗口是一个空白窗口,上面什么都没有。

-在新窗口的“关闭”事件中我把代码再次显示主窗口。

    private void Window_Closed(object sender, EventArgs e)
    {
        var mainWindow = new MainWindow();
        mainWindow.Show();
    }
  • 如果我运行程序并关闭主窗口不打开第二个窗口,程序将按照我的意愿结束。

  • 如果我单击主窗口上的按钮,将我带到第二个窗口,然后关闭该窗口,将我带回主窗口,然后关闭主窗口,程序不会结束。 (这意味着我必须在 Visual Studio 中点击停止按钮才能结束)

这就像访问第二个窗口让某种进程在运行一样。

所以,当我关闭主窗口时,我可以运行:

 Application.Current.Close();

但这安全吗?我是否有机会将某些东西挂起来?或者有没有更好的方法来关闭第二个窗口,这样当我关闭主程序时程序就会结束?

【问题讨论】:

    标签: c# wpf windows user-interface


    【解决方案1】:

    这些行

       var mainWindow = new MainWindow(); 
       mainWindow.Show(); 
    

    创建一个新的 MainWindow 并显示它。原来的 MainWindow 仍然是隐藏的。

    要解决您的问题,您需要对原始 MainWindow 实例的引用。
    也许您可以在构建辅助窗口时传递此参考

    // Create a NewProjectInfo instance and pass this 
    var projectWindow = new NewProjectInfo(this); 
    this.Hide(); 
    projectWindow.Show(); 
    

    并且在projectWindow的构造函数中,将传入的引用保存在一个全局var中

    var MainWindow _originalReference;
    
    public NewProjectInfo(MainWindow original)
    {
        _originalReference = original;
    }
    

    现在窗口关闭事件可以使用引用的窗口

    private void Window_Closed(object sender, EventArgs e)   
    {   
        _originalReference.Show();   
    }   
    

    【讨论】:

      【解决方案2】:

      您可以在关闭的事件处理程序中简单地调用Application.Current.MainWindow.Show();,而不是创建一个新的主窗口吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-15
        • 1970-01-01
        相关资源
        最近更新 更多