Окно имеет событие закрытия, которое вы можете отменить, но оно не RoutedEvent, поэтому вы не можете подписаться на него таким образом.
Вы всегда можете унаследовать Окно и подписаться на закрытие в одном месте. Все наследующие Windows также наследуют это поведение.
EDIT
Это можно сделать и с помощью поведения.
Убедитесь, что вы установили пакет NuGet с именем Expression.Blend.Sdk .
Чем создать прикрепленное поведение, например, так:
using System.Windows;
using System.Windows.Interactivity;
namespace testtestz
{
public class ClosingBehavior : Behavior<Window>
{
protected override void OnAttached()
{
AssociatedObject.Closing += AssociatedObject_Closing;
}
protected override void OnDetaching()
{
AssociatedObject.Closing -= AssociatedObject_Closing;
}
private void AssociatedObject_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = MessageBox.Show("Close the window?", AssociatedObject.Title, MessageBoxButton.OKCancel) == MessageBoxResult.Cancel;
}
}
}
Чем в вашем XAML добавить это поведение так:
<Window x:Class="testtestz.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
xmlns:local="clr-namespace:testtestz"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
<i:Interaction.Behaviors>
<local:ClosingBehavior/>
</i:Interaction.Behaviors>
<Grid>
</Grid>
</Window>