26


2

カスタムUserControlを含むウィンドウがあります。 UserControlは、それを含むWindowがいつスレッドを終了できるように閉じられたかを知る必要があります。

これを達成する方法についての私の最もよい推測はUserControlのUnloadedイベントを処理することです。 しかし、Unloadedイベントは、ユーザーが実際にクリックしてウィンドウを閉じるときにのみ発生するように見えますが、プログラム的にウィンドウ上でClose()メソッドを呼び出すときには発生しません。

参考のために、ここに私のコードの関連部分をいくつか示します。

MyWindow.xaml:


MyControl.xaml:


MyControl.xaml.cs:

void UserControl_Unloaded(オブジェクトセンダ、RoutedEventArgs e){//スレッドを停止する。 }

要約すると、上記のUserControl_Unloaded()メソッドは、ウィンドウを「手動で」閉じるときに呼び出されます(alt-F4、赤い「X」などをクリックするなど)。 .Close() `。 何か案は?

3 Answer


10


https://stackoverflow.com/questions/502761/disposing-wpf-user-controls[この質問]で答えが判明すれば私にも問題は解決します。 しかし、Unloadedイベントが起動されていないのは、まだ奇妙に思えます。 図に行きます。


3


MyWindowクラスで

this.Closing = new System.ComponentModel.CancelEventHandler(Window1_Closing);

void Window1_Closing(オブジェクトセンダ、System.ComponentModel.CancelEventArgs e){call User Control Method()

}


1


ハンドラをwindow.Closedイベントに接続しないのはなぜですか。 あなたのUserControlはウィンドウを見つけるためにUIツリーをたどることができます。