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