Ось як я роблю своє:
// Any control that causes the Window.Closing even to trigger.
private void MenuItemExit_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
// Method to handle the Window.Closing event.
private void Window_Closing(object sender, CancelEventArgs e)
{
var response = MessageBox.Show("Do you really want to exit?", "Exiting...",
MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
if (response == MessageBoxResult.No)
{
e.Cancel = true;
}
else
{
Application.Current.Shutdown();
}
}
Я закликаю лише Application.Current.ShutDown()
з головного вікна програми, усі інші вікна використовують this.Close()
. У головному вікні Window_Closing(...)
обробляє верхню праву x
кнопку. Якщо будь-який із методів Window_Closing(...)
вимагає закрити вікно, захоплює подію для вимкнення, якщо користувач підтвердить це.
Причиною, яку я фактично використовую Application.Current.Shutdown()
в головному вікні, є те, що я помітив, що якщо помилка дизайну була допущена, і я не оголосив батьків у одному з моїх вікон у додатку, якщо це вікно відкрито, не показуючи його попередньо до останнього активного закриття вікна, мені залишається приховане вікно, яке працює на задньому плані. Додаток не закриється. Єдиний спосіб запобігти повне витоку пам'яті - це я зайти в диспетчер завдань, щоб вимкнути програму. Application.Current.Shutdown()
захищає мене від ненавмисних вад дизайну.
Це з мого особистого досвіду. Зрештою, використовуйте те, що найкраще підходить для вашого сценарію. Це лише чергова інформація.