Подтвердить что ты не робот

WPF Window.Close() не запускает событие UserControl.Unloaded

У меня есть окно, содержащее пользовательский UserControl. UserControl должен знать, когда Окно, содержащее его, было закрыто, чтобы он мог завершить поток.

Мое лучшее предположение о том, как это сделать, - это обработать событие UserControl Unloaded. Тем не менее, событие Unloaded, похоже, срабатывает, когда пользователь на самом деле нажимает, чтобы закрыть окно, но не тогда, когда программным способом вызывается метод Close() в окне.

Для справки, вот некоторые из соответствующих частей моего кода.

MyWindow.xaml:

<Window x:Class="Namespace.MyWindow"
        xmlns:controls="clr-namespace:Namespace.Controls">
    <controls:MyControl/>
</Window>

MyControl.xaml:

<UserControl x:Class="Namespace.Controls.MyControl"
             Unloaded="UserControl_Unloaded"/>
    <!-- Stuff -->
</UserControl>

MyControl.xaml.cs:

void UserControl_Unloaded(object sender, RoutedEventArgs e)
{
    // Stop the thread.
}

Так что просто для примера, метод UserControl_Unloaded() выше вызывается, когда я закрываю окно "вручную" (alt-F4, щелкаю красным "X" и т.д.), но не тогда, когда из другого места в коде я вызовите myWindow.Close(). Любые идеи?

4b9b3361

Ответ 1

Отвергает ответ в этот вопрос, решает проблему и для меня. Тем не менее, кажется странным, что событие Unloaded не запускается. Наведите указатель мыши.

Ответ 2

В классе MyWindow

this.Closing += new System.ComponentModel.CancelEventHandler(Window1_Closing);


void Window1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            call User Control Method()

        }

Ответ 3

Почему просто не подключить обработчик к окну. Закрытое событие? Ваш UserControl может пройти через дерево ui, чтобы найти окно.