WPFアプリケーションでのこの非常に奇妙な動作に気づきました。
fromMainWindow
を使用して表示される、があります。を使用して、(非モーダル)を開くことができます。のはに設定されます。Show()
App.OnStartup
MainWindow
SubWindow
Show()
SubWindow
Owner
MainWindow
SubWindow
閉じていると、MainWindow
再び表示されます(良好)。
一部のアクションでは、 (に設定されている)SubWindow
を使用して、モーダルダイアログとして3番目のウィンドウを開くことができます。そのモーダルダイアログがの存続期間中に少なくとも1回開閉されると、奇妙なことが起こります。ShowDialog()
Owner
SubWindow
SubWindow
閉じた後SubWindow
、MainWindow
表示されません。代わりに、背後にある ランダムなウィンドウがMainWindow
表示されます。なぜこれが起こるのか、そしてそれを修正する方法を誰かが私に説明できますか?
Window
モーダルダイアログが、を使用して表示される通常のダイアログであるか、を使用して表示されるShowDialog()
メッセージボックスであるかは関係ありませんMessageBox.Show()
。
これを再現するための最小限のコードを次に示します。Visual Studioで新しいWPFアプリケーションを作成し、これを事前に生成されたMainWindow.xaml.csに貼り付けます
次に、キーボードのキーを押して1つのウィンドウのみを開き、閉じて、期待どおりの動作をします。2つのキーを押して両方を閉じると、最初のウィンドウがVisual Studioの背後にあります(おそらく)。
public MainWindow()
{
InitializeComponent();
this.PreviewKeyDown += (sender, e) =>
{
if (this.Owner is MainWindow)
{
// we're the SubWindow
MessageBox.Show("I am a modal dialog");
// code below produces the exact same behavior as the message box
//var dialog = new MainWindow();
//dialog.Owner = this;
//dialog.ShowDialog();
}
else
{
// we're the initial MainWindow created by App.
var subWindow = new MainWindow();
subWindow.Owner = this;
subWindow.Show();
}
};
}