ナビゲーション トポロジの概要

この概要では、WPF のナビゲーション トポロジを紹介します。 3 つの一般的なナビゲーション トポロジをサンプルと共に説明します。

注意

このトピックを読む前に、ページ関数を使用した WPF の構造化ナビゲーションの概念を理解している必要があります。 これらのトピックの詳細については、「構造化ナビゲーションの概要」を参照してください。

このトピックは、次のセクションで構成されています。

WPF では、ナビゲーションには、一般に、クリックされると他のページにナビゲートするハイパーリンク (Hyperlink) を持つページ (Page) で構成されます。 ナビゲート先のページは、Uniform Resource Identifier (URI) によって識別されます (「WPF におけるパッケージの URI」を参照)。 ページ、ハイパーリンク、および Uniform Resource Identifier (URI) を表示する次のような簡単な例を考えてみます。

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" WindowTitle="Page1">
  <Hyperlink NavigateUri="Page2.xaml">Navigate to Page2</Hyperlink>
</Page>
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" WindowTitle="Page2">
  <Hyperlink NavigateUri="Page1.xaml">Navigate to Page1</Hyperlink>
</Page>

これらのページは "ナビゲーション トポロジ" に配置され、その構造はページ間をどのような方法で移動できるかによって決まります。 このナビゲーション トポロジは、単純なシナリオに適していますが、ナビゲーションはより複雑なトポロジを必要とすることもあり、アプリケーションの実行中にしか定義できないものもあります。

このトピックでは、"固定線形"、"固定階層"、および "動的生成" という 3 つの一般的なナビゲーション トポロジについて説明 します。 各ナビゲーション トポロジについて、次の図に示されているような UI を持つサンプルによって説明します。

Task pages with data items and navigation buttons.

構造化ナビゲーション トポロジ

ナビゲーション トポロジには、大きく分けて次の 2 種類があります。

  • 固定トポロジ: コンパイル時に定義され、実行時に変化しません。 固定トポロジは、シーケンスが固定されたページを線形的または階層的にナビゲートする場合に役立ちます。

  • 動的トポロジ: ユーザー、アプリケーション、またはシステムから収集された入力に基づいて実行時に定義されます。 動的トポロジは、ページがさまざまなシーケンスでナビゲートされる可能性があるときに便利です。

ナビゲーション トポロジの作成にはページを使用することもできますが、これらのサンプルではページ関数を使用しています。その理由は、ページ関数に用意されている追加サポートによって、トポロジのページ間でデータをやり取りする機能のサポートを簡略化できるためです。

固定線形トポロジは、シーケンスが固定されている 1 つ以上のウィザード ページの構造に似ています。 次の図では、固定線形トポロジを持つウィザードの高レベルの構造とフローを示します。

Diagram that shows a fixed linear topology.

固定線形トポロジを使用するナビゲーションの一般的な動作は、次のとおりです。

  • 呼び出し元ページから起動ページにナビゲートします。起動ページでは、ウィザードを初期化し、ウィザードの最初のページにナビゲートします。 呼び出し元ページからウィザードの最初のページを直接呼び出すこともできるため、起動ページ (UI のない PageFunction<T>) は必須ではありません。 ただし、起動ページを使用すると、ウィザードの初期化プロセスを簡略化でき、特に初期化が複雑な場合に便利です。

  • ユーザーは、[戻る] ボタンと [進む] ボタン (またはハイパーリンク) を使用して、ページ間を移動できます。

  • ユーザーは、履歴を使用してページ間を移動できます。

  • ユーザーは、[キャンセル] ボタンを押すことによって、任意のウィザード ページからウィザードをキャンセルできます。

  • ユーザーは、ウィザードの最後のページで [完了] ボタンを押すことによって、ウィザードを受け入れることができます。

  • ウィザードがキャンセルされると、ウィザードは適切な結果を返し、データは返しません。

  • ユーザーがウィザードを受け入れた場合、ウィザードは適切な結果を返し、収集したデータを返します。

  • ウィザードが完了すると (受け入れられた場合も、キャンセルされた場合も)、ウィザードを構成するページは履歴から削除されます。 これにより、ウィザードの各インスタンスが分離され、異常なデータや状態の発生を防ぎます。

固定階層トポロジを介した動的ナビゲーション

一部のアプリケーションでは、次の図に示されているように、ページから複数のページにナビゲートできる場合があります。

Diagram that shows a page that can navigate to multiple pages.

この構造は固定階層トポロジと呼ばれ、通常、階層内を移動するシーケンスは、アプリケーションまたはユーザーによって実行時に決定されます。 実行時に、他の複数のページにナビゲートできる階層内の各ページは、移動先ページを決定するために必要なデータを収集します。 次の図は、前の図に基づくいくつかの可能なナビゲーション シーケンスを示しています。

Diagram that shows a possible navigation sequence.

固定階層構造内のページのシーケンスは実行時に決定されますが、ユーザー エクスペリエンスは固定線形トポロジの場合と同じです。

  • 呼び出し元ページから起動ページにナビゲートします。起動ページでは、ウィザードを初期化し、ウィザードの最初のページにナビゲートします。 呼び出し元ページからウィザードの最初のページを直接呼び出すこともできるため、起動ページ (UI のない PageFunction<T>) は必須ではありません。 ただし、起動ページを使用すると、ウィザードの初期化プロセスを簡略化でき、特に初期化が複雑な場合に便利です。

  • ユーザーは、[戻る] ボタンと [進む] ボタン (またはハイパーリンク) を使用して、ページ間を移動できます。

  • ユーザーは、履歴を使用してページ間を移動できます。

  • ユーザーは、履歴をたどって戻ることで、ナビゲーション シーケンスを変更できます。

  • ユーザーは、[キャンセル] ボタンを押すことによって、任意のウィザード ページからウィザードをキャンセルできます。

  • ユーザーは、ウィザードの最後のページで [完了] ボタンを押すことによって、ウィザードを受け入れることができます。

  • ウィザードがキャンセルされると、ウィザードは適切な結果を返し、データは返しません。

  • ユーザーがウィザードを受け入れた場合、ウィザードは適切な結果を返し、収集したデータを返します。

  • ウィザードが完了すると (受け入れられた場合も、キャンセルされた場合も)、ウィザードを構成するページは履歴から削除されます。 これにより、ウィザードの各インスタンスが分離され、異常なデータや状態の発生を防ぎます。

一部のアプリケーションでは、複数のページ間を移動するシーケンスの決定にユーザー、アプリケーション、または外部データが必要になり、実行時にしか決定できない場合があります。 次の図では、基本となるナビゲーション シーケンスを持つ一連のページを示します。

A set of pages with an undetermined navigation sequence.

次の図では、実行時にユーザーによって選択されたナビゲーション シーケンスを示します。

Diagram that shows a navigation sequence chosen at run time.

このナビゲーション シーケンスは、動的生成トポロジと呼ばれます。 ユーザーにとっては、他のナビゲーション トポロジと同様に、ユーザー エクスペリエンスは前述のトポロジと同じです。

  • 呼び出し元ページから起動ページにナビゲートします。起動ページでは、ウィザードを初期化し、ウィザードの最初のページにナビゲートします。 呼び出し元ページからウィザードの最初のページを直接呼び出すこともできるため、起動ページ (UI のない PageFunction<T>) は必須ではありません。 ただし、起動ページを使用すると、ウィザードの初期化プロセスを簡略化でき、特に初期化が複雑な場合に便利です。

  • ユーザーは、[戻る] ボタンと [進む] ボタン (またはハイパーリンク) を使用して、ページ間を移動できます。

  • ユーザーは、履歴を使用してページ間を移動できます。

  • ユーザーは、[キャンセル] ボタンを押すことによって、任意のウィザード ページからウィザードをキャンセルできます。

  • ユーザーは、ウィザードの最後のページで [完了] ボタンを押すことによって、ウィザードを受け入れることができます。

  • ウィザードがキャンセルされると、ウィザードは適切な結果を返し、データは返しません。

  • ユーザーがウィザードを受け入れた場合、ウィザードは適切な結果を返し、収集したデータを返します。

  • ウィザードが完了すると (受け入れられた場合も、キャンセルされた場合も)、ウィザードを構成するページは履歴から削除されます。 これにより、ウィザードの各インスタンスが分離され、異常なデータや状態の発生を防ぎます。

関連項目