WPF. Закрытие окна при потере фокуса

158
16 октября 2018, 05:30

В WPF приложении есть небольшая информационная форма, которая вызывается с основной. По задумке на этой информационной форме должен быть стандартный крестик для закрытия, а так же форма должна закрываться сама при потере фокуса. Использую для этого Window_Deactivated.

private void Window_Deactivated(object sender, EventArgs e)
{
    this.Close();
}

При потере фокуса все работает как надо, но при закрытии формы через крестик выпадает исключение:

System.InvalidOperationException: 'Во время закрытия окна нельзя установить для Visibility значение Visible или вызвать Show, ShowDialog, Close или WindowInteropHelper.EnsureHandle.'

Можно ли как-то в Deactivated отловить, что форма уже закрывается, чтобы не кидать повторное закрытие и не вызывать исключение?

Answer 1

Да можно, выставляйте флаг и проверяйте его:

bool isClosing = false;
protected override void OnClosing(CancelEventArgs e)
{
    base.OnClosing(e);
    isClosing = true;
    // Возможно, правильнее isClosing = !e.Cancel;
    //  если выдаете запрос на закрытие или что-то типа того
}
private void Window_Deactivated(object sender, EventArgs e)
{
    if (!isClosing) Close();
}
READ ALSO
C# прокси, поддерживающий авторизацию по сертификату

C# прокси, поддерживающий авторизацию по сертификату

У меня имеется rest self host клиент на одной машине и сервер на другойАвторизация используется по сертификату (httpClientHandler

179
Отловить нажатие на стрелки в TextBox

Отловить нажатие на стрелки в TextBox

Каким образом можно отловить нажатие на стрелки при вводе текста в TextBox? Событие KeyDown не реагирует на их нажатие

190
Uncaught Error: Popover requires tooltip.js

Uncaught Error: Popover requires tooltip.js

Сайт не открывает всплывающие окна, в консоли такая ошибка, как мне подключить tooltip к popover?

175
Вывод элементов инфоблока Битрикс

Вывод элементов инфоблока Битрикс

Начал постигать битрикс, создал инфоблок

147