Ответ 1
Отвергает ответ в этот вопрос, решает проблему и для меня. Тем не менее, кажется странным, что событие 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()
. Любые идеи?
Отвергает ответ в этот вопрос, решает проблему и для меня. Тем не менее, кажется странным, что событие Unloaded не запускается. Наведите указатель мыши.
В классе MyWindow
this.Closing += new System.ComponentModel.CancelEventHandler(Window1_Closing);
void Window1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
call User Control Method()
}
Почему просто не подключить обработчик к окну. Закрытое событие? Ваш UserControl может пройти через дерево ui, чтобы найти окно.