【问题标题】:XAML - Run code when WPF form closesXAML - WPF 表单关闭时运行代码
【发布时间】:2014-02-05 01:23:20
【问题描述】:

我有一个由 UserControls 而不是 Windows 组成的 WPF 表单。与 Windows 不同,UserControl 没有UserControl.CloseUserControl.Closing。当我的应用程序关闭时,我需要能够通过单击应用程序右上角熟悉的红色 x 来运行代码。有没有人这样做过?请记住,我使用的是 MVVM。

这是页面的 XAML:

<UserControl x:Class="ClassName"
             <!--etc..-->
             >
    <Grid>
        <Grid.ColumnDefinitions>
            <!--Columns-->
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <!--Rows-->
        </Grid.RowDefinitions>
        <!--WPF Content-->
    </Grid>
</UserControl>

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

    用户控件没有关闭和关闭事件。因此你可以使用 unloaded 但 unloaded 不会自动触发

    要处理用户控件,请阅读以下文章。

    http://geekswithblogs.net/cskardon/archive/2008/06/23/dispose-of-a-wpf-usercontrol-ish.aspx

    【讨论】:

    • 关于卸载事件的好点,在我写完答案后才意识到。最好的选择是 Dispatcher Shutdown 或应用程序退出事件。
    【解决方案2】:

    你没有窗户?这怎么可能?你会在屏幕外创建它们吗?

    显然,您不能完全使用 XAML,但是如果您想在关闭应用程序之前得到通知,Application.Exit 怎么样。如果您想要一个可拦截和可取消的解决方案,您可以在主窗口上使用Closing(如果有的话)。当然Closed 事件也是一个解决方案。最后但并非最不重要的一点是,您的用户控件上有Unloaded event

    希望对你有所帮助。

    【讨论】:

    • 我正在使用 Phoenix 风格的 MVVM。不需要窗户。您使用 HomeControler 来跟踪您的所有“窗口”。 HomeController 内部是每个“窗口”的构造函数,每当您将 tile 的 Commands:Invoke.OnClick 设置为 "Home.NameOfWindow" 时,都会调用该构造函数。 Unload 接近唯一可行的方法。问题是,当您使用红色 x 退出应用程序时,Unload 永远不会发生。
    • 那么只有应用程序对象,它是某种单例,您可以在其中监听 Exit 事件。
    • 我试图找出应用程序在哪里监听关闭或退出。我告诉你,我不是 MVVM 的粉丝。
    • 真的吗?我喜欢 MVVM :) 我们在整个应用程序中都使用它。但我同意,让它适用于 Windows 和应用程序可能有点牵强。但我区分了 UI 模型和业务模型。存在 Window 或 Application ViewModel 但包装了相应的 Window 和 Application UI Models。要创建一个新窗口,我需要做的就是调用“ApplicationModel.Instance.Windows.Add(new CreateProjectWindowModel())”
    猜你喜欢
    • 1970-01-01
    • 2014-11-16
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多