当WPF关闭时执行代码

29

我不熟悉如何使用事件处理程序,想问一下是否有人能提供或指导我如何使用一个事件处理程序,在关闭/已关闭事件上执行代码?

我知道这是可行的,因为有一个已回答的问题:

在WPF表单关闭时运行代码

但我需要一些指引。

谢谢 =)


看这里,使用OnExit代替OnStartup。http://manaspatnaik.com/blog/index.php/technology/wpf/event-handling-in-wpf/193 - N_A
4个回答

62

就是这个 XAML

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

并编写用于 ClosingClosed 事件的代码

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

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

26
如果你想要完全从代码后台完成,把这个放在你的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);
            }
        }
    }
}

3
您可以在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);
    }
}

“OnExit()”方法在智能感知中没有显示出来,我知道我有正确的using语句,因为MSDN说它在System.Windows命名空间中。有什么想法吗? - Stylzs05
2
正是我所需要的。@Stylzs05:这是一个老问题,但对于那些来到这里的人:如果您编写protected override来声明方法,则智能感知会启动。 - FrankM

-2
如果你在使用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
         }

    ...

这似乎是针对 Windows Forms 的,而问题是关于 WPF 的。 - StayOnTarget

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接