Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

ナビゲーションとページ(ビハインドコード)

今回はマークアップを使わずにビハインドコードでナビゲーションを実装します。

App.xaml

<Application x:Class="HelloWorld.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</Application>

App.xaml.cs

using System.Windows;

namespace HelloWorld {
    public partial class App : Application {
        public App() {
            new MainWindow().Show();
        }
    }
}

MainWindow.xaml

なし

MainWindow.cs

using System.Windows.Navigation;

namespace HelloWorld
{
    public partial class MainWindow : NavigationWindow {
        public MainWindow() {
            Navigate(new Page1());
        }
    }
}

Page1.cs

using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Navigation;

namespace HelloWorld
{
    public partial class Page1 : Page {
        public Page1() {
            TextBlock block = new TextBlock();
            Hyperlink link = new Hyperlink();
            link.Inlines.Add("ページ2に移動");
            link.Click += (s, e) => { NavigationService.Navigate(new Page2()); };
            block.Inlines.Add(link);
            this.Content = block;
            this.WindowTitle = "トップページ";
        }
    }
}

Page2.cs

using System.Windows.Controls;

namespace HelloWorld {
    public partial class Page2 : Page {
        public Page2() {
            TextBlock block = new TextBlock();
            block.Text = "ページ2";
            this.Content = block;
            this.WindowTitle = "ページ2";
        }
    }
}

アプリ実行

ページ1


ページ2


検証

項目 結果
リンクをクリックするとページ2に遷移する。 OK
ページ2に遷移すると戻るボタンが有効になる。 OK
戻るボタンをクリックするとページ1に遷移する。 OK
ページ1に遷移すると進むボタンが有効になる。 OK
進むボタンをクリックするとページ2に遷移する。 OK