Диалоговое окно 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?