web-dev-qa-db-fra.com

Exécuter du code à la fermeture d'un WPF

Je ne suis pas familier avec l'utilisation de gestionnaires d'événements et je me demandais si quelqu'un m'avait ou pouvait me diriger vers un code qui montre comment utiliser un gestionnaire d'événements qui exécutera le code lors de l'événement Close/Closed?

Je sais que cela peut être fait à cause de cette question à réponse:

Exécuter du code sur un formulaire WPF fermer

Mais j'ai besoin d'un peu de direction.

Merci =)

14
Stylzs05

C'est juste ce XAML

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

et code pour les événements Closing et Closed

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

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

Si vous voulez tout faire à partir de code derrière, mettez ceci dans votre fichier .cs de Windows.

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
        }
    }
}

Si vous voulez faire partie de xaml et partie de code, faites ceci en 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>

et cela en .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
        }
    }
}

Les exemples ci-dessus que vous pouvez appliquer à n’importe quel formulaire d’une application xaml. Vous pouvez avoir plusieurs formes. Si vous souhaitez appliquer du code à l'ensemble du processus de fermeture de l'application, modifiez votre fichier app.xaml.cs en conséquence.

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);
            }
        }
    }
}
20
Dan P

Vous pouvez remplacer la fonction OnExit dans App.Xaml.cs comme ceci:

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

L'article de Josh Smith sur MVVM présente un bel exemple de ViewModels qui font partie d'un espace de travail et que vous devez faire à la fermeture. Cette architecture peut être étendue au-delà de la simple fermeture de la fenêtre, mais du nettoyage des ViewModels, etc. 

Exemple de MVM Josh Smith

Dans la figure 7, il décrit la situation dont vous parlez. J'espère que cela t'aides!

1
Jimmy Lyke

Si vous utilisez C # sur Microsoft Visual Studio, les éléments suivants ont fonctionné pour moi. 

Dans votre fichier 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...!
        }
    }
}

Dans votre fichier Window.Designer.cs, ajoutez cette ligne à la méthode suivante.

    ...
        private void InitializeComponent()
        {

            ...

            // 
            // Window
            // 
            ...

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

    ...
0
yogurt1989