【问题标题】:C# WPF How to close a new window correctly?C# WPF 如何正确关闭新窗口?
【发布时间】:2017-06-24 04:08:54
【问题描述】:

我有一个简单的问题:

1-新建一个WPF项目,里面有启动窗口:MainWindow.xaml

2- 在这个项目中,新建一个窗口Window1.xaml

3-Windows1的加载事件,让它关闭。

4- 将Open 按钮添加到MainWindow。实现它的点击事件。

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    this.Close();
}

private void button_Click(object sender, RoutedEventArgs e)
{
    Window1 w = new Window1();
    w.Show();
}

当我启动这个应用程序时,VS2015 的 UI 变成了DEBUGING MODE,然后我点击 Window 右上角的关闭按钮,VS2015 的 UI 恢复正常模式。

现在,如果我启动应用程序,单击Open 按钮,然后Window1 将快速显示并关闭,但是,如果我单击MainWindow 右上角的关闭按钮,情况有所不同:VS2015 不会回到正常模式但留在DEBUGING MODE。所以对我来说,这意味着有东西挂在那里,我不知道它是什么。

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: c# wpf window


    【解决方案1】:

    这不是一个答案,而只是我对一个真正有趣的观察的发现。我做了几次你的测试(打开和关闭窗口),然后转储了 WPF 窗口列表:

    foreach (Window w in Application.Current.Windows)
        Debug.WriteLine(w.GetType().FullName)
    

    导致:

    WpfTest.MainWindow
    Microsoft.VisualStudio.DesignTools.WpfTap.WpfVisualTreeService.Adorners.AdornerLayerWindow
    Microsoft.VisualStudio.DesignTools.WpfTap.WpfVisualTreeService.Adorners.AdornerLayerWindow
    Microsoft.VisualStudio.DesignTools.WpfTap.WpfVisualTreeService.Adorners.AdornerLayerWindow
    

    WpfTap 是 Visual Studio 的 WPF 调试器,可帮助调试 WPF 内容树。

    现在,如果我没有使用Loaded 事件,而是使用ContentRendered 事件来关闭窗口,它不会发生,并且一切正常。如果我不调试就运行.exe也可以。

    因此,Visual Studio 似乎*在* Window 的 Loaded 事件之后附加了 WPF 调试器,如果你过早关闭窗口,它会使调试器组件留在内存中。

    【讨论】:

    • 我试过你的'如果我不调试就运行.exe也可以',这是真的。现在我完全明白为什么会这样了。这正是我的问题的答案,让大家知道,谢谢!
    【解决方案2】:

    在 App.xaml 集中:

    ShutdownMode="OnMainWindowClose"
    

    这必须解决问题。我推荐阅读this question

    【讨论】:

    • 效果很好!谢啦!甚至比你引用我的链接更好。
    • 很高兴能帮上忙。关于链接:我的意思是该帖子的这一部分解释了这种行为的原因:在您的情况下,应用程序没有关闭,因为您可能正在使用默认的 OnLastWindowClose。如果将 ShutdownMode 设置为 OnLastWindowClose:Windows Presentation Foundation (WPF) 会在应用程序中的最后一个窗口关闭时隐式调用 Shutdown,即使任何当前实例化的窗口都设置为主窗口(请参阅 MainWindow)。由于您正在打开一个新窗口而不是关闭它,因此不会调用 shutdown。
    猜你喜欢
    • 2016-06-11
    • 2013-12-30
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多