Выполнение кода при закрытии 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 и т. д.
вы можете переопределить функцию 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
}
...