完全关闭辅助窗口

时间:2012-06-17 22:57:01

标签: c# wpf windows user-interface

看来第二个窗口没有关闭。这就是我在做的事情......

  • 我创建了一个新的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();

但这样安全吗?我有机会留下什么东西吗?或者是否有更好的方法来关闭第二个窗口,所以当我关闭主程序时,程序将结束?

2 个答案:

答案 0 :(得分:3)

这些行

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

答案 1 :(得分:0)

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

相关问题