業務アプリにありがちな、シングルウインドウで画面展開していき、子画面を閉じると親画面が表示される系の実装例。いわゆるパンくずリスト。(まあ以下の実装はリスト表示ではないので、正確にはパンくずリストではないですが)
具体的には、次の画面を .show した後に、次の画面の .Owner に親画面のインスタンスを突っ込んでおきます。
その後、親画面は .Hide で非表示にします。
子画面が閉じられたときは、.Owner を .show してやれば親画面の表示が戻ります。
.Owner の Nothing を確認しているのは、ルートウインドウは親要素がセットされていないため。
Class MainWindow
Private Shared _count As Integer = 0
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
_count += 1
Me.Title = CStr(_count) ' いつ作った Window なのかを確認するための、デバッグ情報。
End Sub
' 子画面を開く
Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
Dim f = New MainWindow
f.Show()
f.Owner = Me
Me.Hide()
End Sub
' 画面を閉じる
Private Sub MainWindow_Closed(sender As Object, e As EventArgs) Handles Me.Closed
If (Me.Owner Is Nothing) = False Then ' ルートウインドウではないなら
Me.Owner.Show()
End If
End Sub
End Class
上記はテストプログラムなので、Title に生成した Windows 番号(_count) を表示して、いつ作成したかわかるようにしています。
また、本来は複数のウインドウで呼び合いますが、枚数作るのは面倒だったので、再帰でサンプルを作っています。