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

Ste*_*hen 27 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>
Run Code Online (Sandbox Code Playgroud)

MyControl.xaml:

<UserControl x:Class="Namespace.Controls.MyControl"
             Unloaded="UserControl_Unloaded"/>
    <!-- Stuff -->
</UserControl>
Run Code Online (Sandbox Code Playgroud)

MyControl.xaml.cs:

void UserControl_Unloaded(object sender, RoutedEventArgs e)
{
    // Stop the thread.
}
Run Code Online (Sandbox Code Playgroud)

所以回顾一下,当我关闭"手动"窗口(alt-F4,单击红色"X"等)时,上面的UserControl_Unloaded()方法被调用,但不是来自我调用的代码中的其他地方myWindow.Close().有任何想法吗?

Ste*_*hen 11

原来这个问题的答案也为我解决了问题.但是,看起来很奇怪,Unloaded事件没有被解雇.去搞清楚.

  • 从文档中:请注意,应用程序开始关闭后不会引发Unloaded事件.当ShutdownMode属性定义的条件发生时,将发生应用程序关闭.如果将清理代码放在Unloaded事件的处理程序中,例如Window或UserControl,则可能无法按预期调用它. (4认同)