2012-04-04 15 views
10

Non ho familiarità con l'utilizzo di gestori di eventi e mi chiedevo se qualcuno avesse o potuto indirizzarmi verso un codice che mostra come utilizzare un gestore di eventi che eseguirà il codice sull'evento Chiudi/Chiuso ?Esegui codice quando si chiude un WPF

So che questo può essere fatto a causa di questa risposto domanda:

Run code on WPF form close

ma ho bisogno di qualche direzione.

Grazie =)

+0

Guardate qui e utilizzare 'OnExit' invece di' OnStartup'. http://manaspatnaik.com/blog/index.php/technology/wpf/event-handling-in-wpf/193 – mydogisbox

risposta

30

E 'solo questo XAML

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

e il codice sia per i Closing e Closed eventi

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

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

Grazie !! Questo è molto apprezzato. Dai un'occhiata! – Stylzs05

0

è possibile ignorare la funzione Su uscita in app.xaml.cs come questo:

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

Il metodo "OnExit()" non viene visualizzato in intellisense e so che ho il corretto utilizzo dichiarazione perché MSDN dice che è nello spazio dei nomi System.Windows. Qualche idea? – Stylzs05

0
articolo di

Josh Smith su MVVM ha un bel esempio di ViewModels che fanno parte di un spazio di lavoro e cosa fare alla chiusura. Questa architettura può essere espansa oltre la semplice finestra chiusa, ma la pulizia ViewModels, ecc

Josh Smith MVVM example

Nella figura 7 descrive la situazione si sta parlando. Spero che questo ti aiuti!

18

Se si vuole fare tutto da codice dietro mettere questo in finestre Cs file di

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

Se si desidera eseguire parte in xaml e parte nel codice dietro non eseguire la sua in 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> 

e questo a 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 
     } 
    } 
} 

Quanto sopra per esempi è possibile applicare a qualsiasi forma in un'applicazione XAML. Puoi avere più moduli. Se si desidera applicare il codice per l'intero processo di uscita dall'applicazione modificare il vostro file app.xaml.cs a questa

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