我有一個包含自定義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