WPF Window.Close()不会触发UserControl.Unloaded事件

时间:2009-09-30 17:09:21

标签: wpf events user-controls

我有一个包含自定义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()。有什么想法吗?

3 个答案:

答案 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树查找窗口。