Диалоговое окно окна WPF отображается с помощью метода ShowDialog в классе Window, например, когда кнопка нажата в главном окне, например.
private void button1_Click(object sender, RoutedEventArgs e)
{
try
{
var window = new Window1();
window.ShowDialog();
}
catch (ApplicationException ex)
{
MessageBox.Show("I am not shown.");
}
}
В окне есть событие Loaded, подписанное в xaml, например:
<Window x:Class="Stackoverflow.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Loaded="Window_Loaded">
<Grid />
</Window>
Исключение возникает в событии Window_Loaded
private void Window_Loaded(object sender, RoutedEventArgs e)
{
throw new ApplicationException();
}
Однако исключение не улавливается уловом во время вызова ShowDialog, и вызов не возвращается. Исключение проглатывается, и окно все еще отображается.
Почему это происходит и как я могу обработать исключение в событии Window_Loaded окна WPF? Должен ли я его поймать в обработчике событий и вручную удалить окно?
В WinForms вам нужно позвонить Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException)
чтобы исключить пузырьки через вызовы ShowDialog. Есть ли аналогичный переключатель, который должен быть установлен в WPF?