5

我正在研究 WPF。主窗口在应用程序启动时打开。此窗口中有两个按钮。每打开一个新窗口。例如,有添加和更新按钮。添加按钮在其单击事件调用上打开一个添加项目窗口,并且类似地更新打开它的窗口“更新项目”。如果我关闭主窗口,这两个窗口“添加项目”和“更新项目”保持打开状态。我希望如果我关闭主窗口,其他两个窗口也应该随之关闭。

app.current.shutdown

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

4

4 回答 4

11

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

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

于 2013-08-14T22:19:32.007 回答
11

您还可以在 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>
于 2018-02-23T14:02:12.267 回答
4

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

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

于 2013-08-14T22:21:05.150 回答
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 应用程序取决于您。

于 2015-03-12T04:22:24.707 回答