.NET WPF アプリ 画面遷移

.NET

前回WPFでHello Worldアプリを作成しました。

こちらで使っているソリューションを使いますが、別のソリューションで同じように操作頂いても問題ないです。

今回も作成するものは簡単ですが、次は新しい画面を追加したいと思います。

画面

WPFにおける画面

WPFの画面は、Windowクラスを使います。Windows FormsではFormクラスが画面に該当しました。Windows FormsのFormクラスと同じような扱いになるのがWindowクラスになります。
Windows Formsではデザイナを使って、Designer.csファイルが生成されました。

簡単なWindows Formsアプリは下記をご参照ください。

WPFでもデザイナを使って画面をデザインできます。WPFはXAMLという形式でデザインし、xamlファイルが生成されます。XAMLについては少しずつ紹介していきたいと思います。

WPFアプリのウインドウ管理

ウインドウをどう管理するかは作成するアプリケーション次第ですが、WPFにはアプリケーション情報をカプセルかしたクラスが存在します。その名の通りApplicationという名前のクラスが存在し、こちらにWindowsプロパティがあります。こちらにインスタンス化されたウインドウが保持されています。またメインウインドウは同様にMainWindowというプロパティで保持されています。

使用頻度は多くはないですが、別のウインドウにアクセスしたり、メインウインドウにアクセスしたりする際に使うことがあります。

新規画面を追加

Hello Worldアプリとして作成したHelloWpfApp(HelloDesktopAppSolutionソリューション)を開きます。このプロジェクトでなくても同様のことは可能です。
プロジェクトを右クリックし、追加-ウインドウ(WPF)を選択します。

新しい項目の追加画面が表示されますので、ファイル名を「SecondWindow.xaml」として追加ボタンを押下します。

下記の通り、ソリューションエクスプローラーに「SecondWindow.xaml」が追加されていれば画面(ウインドウ)の追加は完了です。

次画面のデザイン

次画面のデザインを行います。
今回はメイン画面と区別をつけることを目的として下記のようにデザインします。

デザイナ上で、ウインドウの背景色を「」に、TextBlockをドラッグ&ドロップして、Textプロパティに「次の画面です。」を入力します。
デザイナを使っても、直接XAMLを編集しても同じです。下記のようなXAMLになります。

<Window x:Class="HelloWpfApp.SecondWindow"
        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:HelloWpfApp"
        mc:Ignorable="d"
        Title="SecondWindow" Height="200" Width="300" Background="LightYellow" BorderThickness="1" BorderBrush="LightBlue">
    <Grid>
        <TextBlock HorizontalAlignment="Left" Margin="21,24,0,0" TextWrapping="Wrap" Text="次の画面です。" VerticalAlignment="Top"/>
    </Grid>
</Window>

今回は簡単なデザインなので、単純なXAMLになります。
もっとコントロールを配置したり、バインドという機構を使うともっと多くのタグや属性が出現してきます。また次の介していければと思います。
では、次で作成した画面の呼び出し処理をコーディングします。

次画面の呼び出し

メイン画面に次の画面を表示するボタンを配置し、このボタンのクリックイベントで画面の呼び出しを行います。
下記のようにメイン画面をデザインします。

XAMLは下記になります。

<Window x:Class="HelloWpfApp.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:HelloWpfApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="150" Width="250">
    <Grid>
        <Label Content="Hello World" HorizontalAlignment="Left" Margin="24,26,0,0" VerticalAlignment="Top"/>
        <Button Content="メッセージ" HorizontalAlignment="Left" Margin="118,26,0,0" VerticalAlignment="Top" Width="80" Height="26" Click="Button_Click"/>
        <Label Content="画面遷移" HorizontalAlignment="Left" Margin="39,74,0,0" VerticalAlignment="Top"/>
        <Button Content="次へ" HorizontalAlignment="Left" Margin="118,74,0,0" VerticalAlignment="Top" Width="80" Height="26" Click="ButtonNext_Click" />

    </Grid>
</Window>

デザイン上で「次へ」ボタンをダブルクリックすると、クリックイベントハンドラがコードビハインド(MainWindow.xaml.cs)に追加されます。
(または、XAML中でClickと記載し、新しいイベントハンドラを選びます。)
イベントハンドラ名は、「Button_Click」がデフォルトでこのままでも問題ありません。
上記の例では「ButtonNext_Click」にイベントハンドラ名を変更しています。

下記のようにコードビハインドにコードを記載します。
これで次の画面(SecondWindow)を生成して、表示するロジックになります。

private void ButtonNext_Click(object sender, RoutedEventArgs e)
{
    SecondWindow window = new SecondWindow();
    window.Show();
}

1行目でSecondWindowクラスのインスタンスを生成しています。
2行目でウインドウを表示するようにShowメソッドを呼び出しています。
ShowDialogメソッドを使用するとモーダルで開き、開いたウインドウを閉じるまで、アプリケーション内の他のウインドウを操作することはできなくなります。
今回は単純に別の画面を表示するのみなので、Showメソッドを使用して画面を表示しています。

実行して、次へボタンを押下すると、新しい画面が表示されます。


コメント

タイトルとURLをコピーしました