我有一个包含自定义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()时不会调用。有什么想法吗?
发布于 2009-09-30 19:51:25
事实证明,this question的答案也为我解决了这个问题。不过,看起来仍然很奇怪的是,卸载事件并没有被触发。去想一想。
发布于 2011-01-03 15:51:39
在MyWindow类中
this.Closing += new System.ComponentModel.CancelEventHandler(Window1_Closing);
void Window1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
call User Control Method()
}发布于 2009-09-30 17:41:38
为什么不将处理程序连接到window.Closed事件呢?您的UserControl可以遍历ui树来查找窗口。
https://stackoverflow.com/questions/1499477
复制相似问题