Выполнение кода при закрытии WPF

Я не знаком с использованием обработчиков событий, и мне было интересно, мог ли кто-нибудь направить меня к некоторому коду, который показывает, как использовать обработчик событий, который будет выполнять код на Close/Closed event?

Я знаю, что это можно сделать из-за этого ответа на вопрос:

выполнить код в форме WPF close

но мне нужно какое-то направление.

спасибо =)

5 ответов


это просто XAML

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

и код для обоих Closing и Closed событий

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

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

если вы хотите сделать все это из кода позади, поместите это в свои окна .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. Вы можете иметь несколько форм. Если вы хотите применить код для всего процесса выхода из приложения, измените приложение.код 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);
            }
        }
    }
}

статья Джоша Смита о MVVM имеет хороший пример ViewModels, которые являются частью рабочей области и что делать на close. Эта архитектура может быть расширена за пределы только вашего окна, но очистка ViewModels и т. д.

Джош Смит MVVM пример


вы можете переопределить функцию OnExit в приложении.код XAML.cs, как это:

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

Если вы используете C# в Microsoft Visual Studio, для меня сработало следующее.

в окне.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...!
        }
    }
}

в окне.Дизайнер.cs-файл добавьте эту строку в следующий метод

    ...
        private void InitializeComponent()
        {

            ...

            // 
            // Window
            // 
            ...

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

    ...