Mainwindow关闭时如何关闭所有窗口

时间:2013-08-14 22:17:17

标签: c# .net wpf

我正在研究WPF。 Mainwindow随应用程序启动而打开。此窗口中有两个按钮。每个都打开一个新窗口。例如,有添加和更新按钮。 “添加”按钮在其单击事件调用上打开“添加项”窗口,同样更新将打开其窗口“更新项”。 如果我关闭Mainwindow这两个窗口“Add-Item”和“Update-Item”仍然打开。我希望如果我关闭Mainwindow,这些其他两个窗口也应该关闭它。

app.current.shutdown

主要使用app.current.shutdown。我的问题是:我必须在我的程序,主窗口或App.config中发布此代码行。我是否还必须在其响应中调用任何事件或函数?

4 个答案:

答案 0 :(得分:10)

Application.MainWindow设置为主窗口的实例,并确保Application.ShutdownModeOnMainWindowClose

此外,如果您不希望整个应用程序关闭:创建子窗口的MainWindow Owner。 (这有其他副作用)

答案 1 :(得分:3)

我认为解决方案是将每个子窗口的Owner属性设置为主窗口。这样,在主窗口上执行的任何窗口操作也会在所有其他窗口上执行:

http://msdn.microsoft.com/en-us/library/system.windows.window.owner.aspx

答案 2 :(得分:3)

您还可以在App.xaml文件中设置ShutdownMode:

<Application x:Class="WpfApp1.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApp1"
    StartupUri="MainWindow.xaml"
    ShutdownMode="OnMainWindowClose">
    <Application.Resources>
    </Application.Resources>
</Application>

答案 3 :(得分:0)

由于乍看之下很难找到正确的方式来做我们的朋友建议我继续使用一些示例(最佳实践)代码

这就是 Josh Smith 显示 App.xaml.cs 的样子。

namespace MyApplication
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        static App()
        {
            // Ensure the current culture passed into bindings is the OS culture.
            // By default, WPF uses en-US as the culture, regardless of the system settings.
            //
            FrameworkElement.LanguageProperty.OverrideMetadata(
              typeof(FrameworkElement),
              new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
        }

        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            var window = new MainWindow();

            // To ensure all the other Views of a type Window get closed properly.
            ShutdownMode = ShutdownMode.OnMainWindowClose;

            // Create the ViewModel which the main window binds.
            var viewModel = new MainWindowViewModel();

            // When the ViewModel asks to be closed,
            // close the window.
            EventHandler handler = null;
            handler = delegate
            {
                viewModel.RequestClose -= handler;
                window.Close();
            };
            viewModel.RequestClose += handler;

            // Allow all controls in the window to bind to the ViewModel by
            // setting the DataContext, which propagates down the element tree.
            window.DataContext = viewModel;
            window.Show();
        }
    }
}

同样,在一天结束时,您可以选择如何布局MVVM应用程序。