我有一个包含自定义UserControl的窗口。 UserControl需要知道包含它的Window何时关闭,以便它可以终止线程。WPF Window.Close()不触发UserControl.Unloaded事件
对于如何完成此操作,我最好的猜测是处理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事件。当由ShutdownMode属性定义的条件发生时,会发生应用程序关闭。如果您将清理代码置于Unloaded事件的处理程序中,如Window或UserControl,则可能无法按预期调用它。 – 2010-11-18 22:24:28