150

Xamlウィンドウがある場合、それを子ウィンドウとして開き、親ウィンドウの実行を続行する前に、親ウィンドウで子が閉じるのを待つにはどうすればよいですか?

4

4 に答える 4

243

ShowDialogメソッドを使用してウィンドウを表示してみましたか?

ダイアログウィンドウのOwnerプロパティをメインウィンドウに設定することを忘れないでください。これにより、Alt+Tabbingなどのときの奇妙な動作を回避できます。

于 2009-01-31T18:32:53.893 に答える
31

Window.Show はウィンドウを表示し、実行を継続します。これはノンブロッキング コールです。

Window.ShowDialog は、呼び出し元のスレッドをブロックし ( [1]のようなもの)、ダイアログを表示します。また、親/所有ウィンドウとの対話もブロックします。(何らかの理由で) ダイアログが閉じられると、ShowDialog は呼び出し元に戻り、DialogResult にアクセスできるようになります (必要な場合)。

[1]ディスパッチャ フレームを WPF ディスパッチャにプッシュすることで、ディスパッチャのポンピングを維持します。これにより、メッセージ ポンプがポンピングし続けます。

于 2009-01-31T19:34:12.457 に答える
2

WindowオブジェクトmyWindowを指定すると、myWindow.Show()はそれをモードレスに開き、myWindow.ShowDialog()はそれをモーダルに開きます。しかし、私が覚えていることから、後者でさえブロックしません。

于 2009-01-31T18:34:02.953 に答える