WPF关闭时执行代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF关闭时执行代码相关的知识,希望对你有一定的参考价值。

我不熟悉使用事件处理程序,我想知道是否有人或者可以指示我使用一些代码来演示如何使用将在Close / Closed事件上执行代码的事件处理程序?

我知道这可以做到,因为这个回答的问题:

Run code on WPF form close

但我需要一些方向。

谢谢=)

答案

就是这个XAML

<Window ... Closing="Window_Closing" Closed="Window_Closed">
    ...
</Window>

以及ClosingClosed事件的代码

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    ...
}

private void Window_Closed(object sender, EventArgs e)
{
    ....
}
另一答案

如果你想从后面的代码中完成所有操作,请将它放在windows .cs文件中

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Closed += new EventHandler(MainWindow_Closed);
        }

        void MainWindow_Closed(object sender, EventArgs e)
        {
            //Put your close code here
        }
    }
}

如果你想参与xaml并参与代码,请在xaml中执行此操作

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Closed="MainWindow_Closed">
    <Grid>

    </Grid>
</Window>

这在.cs

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        void MainWindow_Closed(object sender, EventArgs e)
        {
            //Put your close code here
        }
    }
}

以上示例您可以应用于xaml应用程序中的任何表单。您可以有多个表单。如果要为整个应用程序退出过程应用代码,请将app.xaml.cs文件修改为此文件

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        protected override void OnExit(ExitEventArgs e)
        {
            try
            {
                //Put your special code here
            }
            finally
            {
                base.OnExit(e);
            }
        }
    }
}
另一答案

您可以像这样覆盖App.Xaml.cs中的OnExit函数:

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
    protected override void OnExit(ExitEventArgs e)
    {
        //do your things
        base.OnExit(e);
    }
}
另一答案

Josh Smith关于MVVM的文章有一个很好的ViewModels示例,它是工作区的一部分,以及关闭时要做什么。这种架构可以扩展到窗口关闭之外,还可以清理ViewModels等。

Josh Smith MVVM example

在图7中,他描述了您正在谈论的情况。希望这可以帮助!

另一答案

如果您在Microsoft Visual Studio上使用C#,则以下内容适用于我。

在您的Window.cs文件中

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace Name_Space
{
    public partial class Window : Form
    {

        public Window()
        {
            InitializeComponent();
           //...
        }

        private void Window_Load(object sender, EventArgs e)
        {
          //...
        }

        private void Window_Closed(object sender, EventArgs e)
        {
            // Your code goes here...!
        }
    }
}

在Window.Designer.cs文件中,将此行添加到以下方法中

    ...
        private void InitializeComponent()
        {

            ...

            // 
            // Window
            // 
            ...

            this.Closed += new System.EventHandler(this.Window_Closed); // <-- add this line
         }

    ...

以上是关于WPF关闭时执行代码的主要内容,如果未能解决你的问题,请参考以下文章

当活动被破坏但我必须继续执行片段中的代码时该怎么办?

从控制台应用程序启动 WPF 窗口

wpf关闭主窗口询问“退出”的问题

解决方案电影标题中缺少代码的片段,完成挑战更多[关闭]

设置datagrid行背景颜色WPF - 循环[关闭]

每当我运行我的片段时,这行代码 mapFragment.setRetainInstance(true);正在崩溃我的应用程序? [关闭]