C#WPFで画面遷移PHP風


PHPでいうFormからPOSTメソッドで次の画面に値を送る初歩のプログラム。
できるだけ簡単にやってみる。

前提
visualStudio2019 -> 新しいプロジェクトの作成 -> WPF App(.NET Core)c#

MainWindow.xaml
//Navigationに変更
<NavigationWindow x:Class="kadai1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:kadai1"
        mc:Ignorable="d"
        //Source追加
        Title="MainWindow" Height="300" Width="400" Source="Page1.xaml">
</NavigationWindow>
//Gridタグを消去
MainWindow.xaml.cs
//NavigationWindowに変更
public partial class MainWindow : NavigationWindow {
    public MainWindow() {
        InitializeComponent();
    }
}

ページの追加: Page1.xaml

Page1.xaml
<Page 
//追加:Loaded
Title="Page1" Loaded="Page1_Loaded">
//追加
<Grid>
    <StackPanel Orientation="Vertical" Margin="10,0">
        <Label>名前を入力して下さい</Label>
        <TextBox x:Name="_name" Width="100" HorizontalAlignment="Left"></TextBox>
        <Button Click="Btn_Click" Width="100" HorizontalAlignment="Left" Margin="0,10">送信</Button>
    </StackPanel>
</Grid>
Page1.xaml.cs
//追加
public partial class Page1 : Page {
    private NavigationService _navigation;
    public Page1() {
        InitializeComponent();
    }
    private void Btn_Click(object sender, RoutedEventArgs e) {
        Application.Current.Properties["Name"] = _name.Text;
        var _page2 = new Page2();
        _navigation.Navigate(_page2);
    }
    private void Page1_Loaded(object sender, RoutedEventArgs e) { 
        _navigation = this.NavigationService;
    }
}

ページの追加: Page2.xaml

Page2.xaml
//追加
<Grid>
    <StackPanel Orientation="Horizontal" Margin="10,0">
        <Label Name="_named" Margin="0,10"></Label>
        <Label Margin="0,10">さん。ようこそ。</Label>
    </StackPanel>
</Grid>
Page2.xaml.cs
//変更
public partial class Page2 : Page {
    public Page2() {
        InitializeComponent();
        _named.Content = Application.Current.Properties["Name"];
    }
}


説明
最低限のプログラムです。
本来なら空白時には次の画面に行かないとかバリデーションが必要となります。
NavigationWindowで画面遷移します。
Application.Current.Propertiesで値の送信はPHPのPOSTぽいので使いました。
実際にはこんなグローバル変数は使わないと思います笑