本文へスキップ
BecomeCoder

C# WPFコース · 第1章 WPF ― デスクトップアプリ開発 · レッスン14

画面遷移

ローカル実施

導入

実用アプリは複数の画面を持ちます。WPFでの画面遷移——別ウィンドウを開く方法と、1つのウィンドウ内でページを切り替える方法——を学び、View層で必要な知識を締めくくります。

図解

flowchart LR
    subgraph 方法A["別Windowを開く"]
        W1["MainWindow"] -->|新しいWindowを開く| W2["SubWindow"]
    end
    subgraph 方法B["Frame内でPage切替(推奨)"]
        F["Frame"] --> P1["Page1"]
        F --> P2["Page2"]
    end

XAMLサンプル(読み物)

// 方法A: 別ウィンドウを開く(ダイアログ的な使い方)
var sub = new SubWindow();
sub.Show();              // 非モーダル(両方操作可)
// sub.ShowDialog();     // モーダル(閉じるまで元画面を操作不可)

// 方法B: 1つのFrame内でPageを切り替える(画面遷移の定番)
mainFrame.Navigate(new Page2());   // Frameの中身をPage2に差し替える
<!-- 方法B: MainWindowにFrameを置き、その中身を差し替えていく -->
<Window ...>
    <Frame x:Name="mainFrame" />
</Window>

<!-- Page1.xaml(Windowではなく Page として作る) -->
<Page ...>
    <Button Content="次へ" Click="GoNext" />
</Page>
  • 方法A(別Window)new Window().Show()で新しい画面を開く。ShowDialog()はモーダル(閉じるまで前の画面を操作不可)
  • 方法B(Frame+Page):1つのウィンドウ内でFrameの中身をNavigateで差し替える。ウィザードや画面切り替えの定番
  • MVVMでは、遷移もナビゲーションサービスをViewModelに注入して行い、Viewから遷移ロジックを分離するのが発展形
  • 画面間のデータ受け渡しは、コンストラクタ引数や共有ViewModel(BlazorのDI共有と同じ考え方)で行う

詳細手順

  1. スターター142-wpf-navigation/starter.zipを開く(Frame+複数Page構成)
  2. F5で実行し、「次へ」ボタンで同じウィンドウ内の画面が切り替わることを確認する
WPFアプリでFrame内のPageが切り替わり、Page1からPage2へ遷移した様子
Frame内のPage遷移(Page1 → Page2)
  1. 「別ウィンドウを開く」ボタンでShowDialogのモーダル動作(閉じるまで元画面を操作できない)も確認する

まとめ

  • 画面遷移は「別Windowを開く」か「Frame内でPageを切り替える」の2方式
  • モーダル(ShowDialog)は閉じるまで元画面を操作不可
  • MVVMでは遷移もサービス化してViewから分離できる

次章: クラウドと連携する「AWS SDK」へ進みます。