我有一个包含自定义UserControl的窗口。 UserControl需要知道何时关闭包含它的Window,以便它可以终止一个线程。
我最好的猜测是如何实现这一点是处理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.
}
所以回顾一下,当我关闭“手动”窗口(alt-F4,点击红色“X”等)时,上面的UserControl_Unloaded()方法被调用,但不是从代码中的其他地方开始致电myWindow.Close()
。有什么想法吗?
答案 0 :(得分:10)
原来this question中的答案也解决了我的问题。但是,看起来很奇怪,Unloaded事件没有被解雇。去图。
答案 1 :(得分:3)
在MyWindow课程中
this.Closing += new System.ComponentModel.CancelEventHandler(Window1_Closing);
void Window1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
call User Control Method()
}
答案 2 :(得分:1)
为什么不将处理程序连接到window.Closed事件?您的UserControl可以通过ui树查找窗口。