驚くべきことに、Dispatcher に ShowDialog() 呼び出しを配置することで、一度に複数のダイアログを表示できます。
uiDispatcher.BeginInvoke(new Func<bool?>(myWindow.ShowDialog));
どうしてこれが機能し、ダイアログが表示されてもUIはユーザーの操作に応答して実行されたままになります(ShowDialog()がUIスレッドでなければならないスレッドをブロックするため、そうではないと思いました)、表示を続けることさえできます新しいダイアログ:
Window myWindow;
for(int i = 0; i < 5; i ++)
{
myWindow = new Window();
uiDispatcher.BeginInvoke(new Func<bool?>(myWindow.ShowDialog));
}
また、UI は引き続きレスポンシブです。
この動作に依存することに注意する必要がありますか? (バックグラウンドスレッドが必要なときに、あるダイアログを別のダイアログの上に表示したい-これは機能します-唯一の望ましくない動作は、アプリを切り替えるときにWPFがどのダイアログを一番上に置くべきかわからない場合があるようですが、それでも1つを表示できますダイアログの外側をクリックすることは通常許可されていないため、ダイアログでは珍しいことです)。
更新:私が遭遇した 1 つの問題は、ダイアログの 1 つを非表示にすると、ユーザーが他のすべての Windows と再びやり取りできることです! (他のダイアログだけではありません)。参照: WPF ダイアログがモーダルではありませんか?