ナビゲーションの概要Navigation Overview

Windows Presentation Foundation (WPF) は、2 種類のアプリケーションで使用できるブラウザー スタイルのナビゲーションをサポートしています: スタンドアロン アプリケーションとXAML ブラウザー アプリケーション (XBAP)XAML browser applications (XBAPs)します。Windows Presentation Foundation (WPF) supports browser-style navigation that can be used in two types of applications: standalone applications and XAML ブラウザー アプリケーション (XBAP)XAML browser applications (XBAPs). ナビゲーションのためのパッケージ コンテンツにWPFWPF提供、Pageクラス。To package content for navigation, WPFWPF provides the Page class. 1 つから移動することができますPage別に宣言を使用して、 Hyperlink、またはを使用してプログラムで、NavigationServiceします。You can navigate from one Page to another declaratively, by using a Hyperlink, or programmatically, by using the NavigationService. WPFWPF は、ナビゲート元のページを記憶し、それらのページに戻るために、履歴を使用します。uses the journal to remember pages that have been navigated from and to navigate back to them.

PageHyperlinkNavigationService、履歴がで提供されるナビゲーション サポートの中核を形成し、WPFWPFします。Page, Hyperlink, NavigationService, and the journal form the core of the navigation support offered by WPFWPF. この概要では、これらの機能の詳細を説明へのナビゲーションを含む高度なナビゲーション サポートをカバーする前にExtensible Application Markup Language (XAML)Extensible Application Markup Language (XAML)ファイル、HTMLHTMLファイル、およびオブジェクト。This overview explores these features in detail before covering advanced navigation support that includes navigation to loose Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML) files, HTMLHTML files, and objects.

注意

このトピックで、"browser"という用語がホストできるブラウザーだけを参照WPFWPFなど現在アプリケーションをMicrosoft Internet ExplorerMicrosoft Internet Explorerと Firefox。In this topic, the term "browser" refers only to browsers that can host WPFWPF applications, which currently includes Microsoft Internet ExplorerMicrosoft Internet Explorer and Firefox. 特定WPFWPF機能が特定のブラウザーでのみサポートされている、ブラウザーのバージョンと呼びます。Where specific WPFWPF features are supported only by a particular browser, the browser version is referred to.

このトピックの主なナビゲーション機能の概要を示しますWPFWPFします。This topic provides an overview of the key navigation capabilities in WPFWPF. これらの機能は両方のスタンドアロン アプリケーションで使用できるとXBAPXBAPsのコンテキスト内でこのトピックで説明していますが、XBAPXBAPします。These capabilities are available to both standalone applications and XBAPXBAPs, although this topic presents them within the context of an XBAPXBAP.

注意

このトピックでを構築してデプロイする方法について説明しないXBAPXBAPsします。This topic doesn't discuss how to build and deploy XBAPXBAPs. 詳細についてはXBAPXBAPsを参照してくださいWPF XAML ブラウザー アプリケーションの概要します。For more information on XBAPXBAPs, see WPF XAML Browser Applications Overview.

このセクションでは、ナビゲーションの次の側面について説明し、例を示します。This section explains and demonstrates the following aspects of navigation:

ページの実装Implementing a Page

WPFWPFは、.NET Framework のオブジェクト、カスタム オブジェクト、列挙値、ユーザー コントロールでは、いくつかのコンテンツの種類に移動できますXAMLXAMLファイル、およびHTMLHTMLファイル。In WPFWPF, you can navigate to several content types that include .NET Framework objects, custom objects, enumeration values, user controls, XAMLXAML files, and HTMLHTML files. パッケージ コンテンツを最も一般的で便利な方法を使用して、ただし、わかりますPageします。However, you'll find that the most common and convenient way to package content is by using Page. さらに、Pageナビゲーション固有の機能をそれらの外観を強化し、開発を簡略化を実装します。Furthermore, Page implements navigation-specific features to enhance their appearance and simplify development.

使用してPageのナビゲート可能なページを宣言によって実装できますXAMLXAML次のようなマークアップを使用して別のコンテンツ。Using Page, you can declaratively implement a navigable page of XAMLXAML content by using markup like the following.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" />

APageで実装されるXAMLXAMLマークアップがPage、ルート要素とする必要があります、 WPFWPF XMLXML名前空間宣言。A Page that is implemented in XAMLXAML markup has Page as its root element and requires the WPFWPFXMLXML namespace declaration. Page要素に移動し、表示するコンテンツが含まれています。The Page element contains the content that you want to navigate to and display. 設定してコンテンツを追加する、Page.Contentプロパティ要素の次のマークアップで示すようにします。You add content by setting the Page.Content property element, as shown in the following markup.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <Page.Content>
    <!-- Page Content -->
    Hello, Page!
  </Page.Content>
</Page>

Page.Content には、1 つの子要素のみを含めることができます。前の例では、コンテンツは単一の文字列「Hello, Page!」です。Page.Content can only contain one child element; in the preceding example, the content is a single string, "Hello, Page!" 実際は、通常使用するレイアウト コントロールの子要素として (を参照してくださいレイアウト) に格納し、コンテンツを構成します。In practice, you will usually use a layout control as the child element (see Layout) to contain and compose your content.

子要素をPage要素のコンテンツと見なされます、Pageと、その結果、明示的なを使用する必要はありませんPage.Content宣言します。The child elements of a Page element are considered to be the content of a Page and, consequently, you don't need to use the explicit Page.Content declaration. 次のマークアップは、前のサンプルの宣言と同等です。The following markup is the declarative equivalent to the preceding sample.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <!-- Page Content -->
  Hello, Page!
</Page>

この場合、Page.Contentの子要素を自動的に設定されますが、Page要素。In this case, Page.Content is automatically set with the child elements of the Page element. 詳細については、「WPF のコンテンツ モデル」を参照してください。For more information, see WPF Content Model.

マークアップのみPageはコンテンツを表示するのに便利です。A markup-only Page is useful for displaying content. ただし、Pageことも、このページと対話をユーザーに許可する表示コントロールとイベントを処理し、アプリケーション ロジックを呼び出すことによってユーザーの操作に応答できます。However, a Page can also display controls that allow users to interact with the page, and it can respond to user interaction by handling events and calling application logic. 対話型Pageの次の例に示すように、マークアップと分離コードの組み合わせを使用して実装されます。An interactive Page is implemented by using a combination of markup and code-behind, as shown in the following example.

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.HomePage">
  Hello, from the XBAP HomePage!
</Page>
using System.Windows.Controls;

namespace SDKSample
{
    public partial class HomePage : Page
    {
        public HomePage()
        {
            InitializeComponent();
        }
    }
}

Imports System.Windows.Controls

Namespace SDKSample
    Partial Public Class HomePage
        Inherits Page
        Public Sub New()
            InitializeComponent()
        End Sub
    End Class
End Namespace

マークアップ ファイルと分離コード ファイルを連携させるには、次の構成が必要です。To allow a markup file and code-behind file to work together, the following configuration is required:

  • マークアップでは、Page要素を含める必要があります、x:Class属性。In markup, the Page element must include the x:Class attribute. ときに、アプリケーションがビルドが存在するx:Classファイルにより、マークアップでMicrosoft Build Engine (MSBuild)Microsoft build engine (MSBuild)を作成する、partialクラスから派生したPageによって指定された名前を持つ、x:Class属性。When the application is built, the existence of x:Class in the markup file causes Microsoft Build Engine (MSBuild)Microsoft build engine (MSBuild) to create a partial class that derives from Page and has the name that is specified by the x:Class attribute. 追加する必要があります、XMLXML名前空間宣言、XAMLXAMLスキーマ ( xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" )。This requires the addition of an XMLXML namespace declaration for the XAMLXAML schema ( xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ). 生成されたpartialクラスが実装するInitializeComponentイベントが登録され、プロパティを設定すると呼ばれる、マークアップで実装されます。The generated partial class implements InitializeComponent, which is called to register the events and set the properties that are implemented in markup.

  • 分離コード クラスがある必要があります、partialによって指定される同じ名前のクラス、x:Classのマークアップ、およびその属性がから派生する必要がありますPageします。In code-behind, the class must be a partial class with the same name that is specified by the x:Class attribute in markup, and it must derive from Page. これにより、分離コード ファイルに関連付けられる、partialアプリケーションのビルド時にマークアップ ファイル用に生成されたクラス (を参照してくださいWPF アプリケーションのビルド)。This allows the code-behind file to be associated with the partial class that is generated for the markup file when the application is built (see Building a WPF Application).

  • 分離コードで、Pageクラスを呼び出すコンス トラクターを実装する必要があります、InitializeComponentメソッド。In code-behind, the Page class must implement a constructor that calls the InitializeComponent method. InitializeComponent 実装ファイルの生成されたマークアップによってpartialイベントを登録し、マークアップで定義されているプロパティを設定するクラス。InitializeComponent is implemented by the markup file's generated partial class to register events and set properties that are defined in markup.

注意

新しいを追加するとPageを使用してプロジェクトにMicrosoft Visual StudioMicrosoft Visual StudioPageマークアップと分離コードの両方を使用して実装としてマークアップと分離コード ファイル間の関連付けを作成するために必要な構成が含まれていますここで説明します。When you add a new Page to your project using Microsoft Visual StudioMicrosoft Visual Studio, the Page is implemented using both markup and code-behind, and it includes the necessary configuration to create the association between the markup and code-behind files as described here.

作成したら、 Page、そこに移動できます。Once you have a Page, you can navigate to it. 最初に指定するPageに移動するアプリケーションを開始を構成する必要があるPageします。To specify the first Page that an application navigates to, you need to configure the start Page.

スタート ページの構成Configuring a Start Page

XBAPXBAPs では、一定の量のアプリケーション インフラストラクチャをブラウザーでホストする必要があります。require a certain amount of application infrastructure to be hosted in a browser. WPFWPFApplicationクラスは、必要なアプリケーション インフラストラクチャを確立するアプリケーション定義の一部 (を参照してくださいアプリケーション管理の概要)。In WPFWPF, the Application class is part of an application definition that establishes the required application infrastructure (see Application Management Overview).

アプリケーション定義として構成されているマークアップ ファイルを使用してマークアップと分離コードの両方を使用して、通常、実装、 MSBuildMSBuild ApplicationDefinition項目。An application definition is usually implemented using both markup and code-behind, with the markup file configured as an MSBuildMSBuildApplicationDefinition item. 用のアプリケーション定義を次に、XBAPXBAPします。The following is an application definition for an XBAPXBAP.

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.App" />
using System.Windows;

namespace SDKSample
{
    public partial class App : Application { }
}

Imports System.Windows

Namespace SDKSample
    Partial Public Class App
        Inherits Application
    End Class
End Namespace

XBAPXBAP 、アプリケーション定義を使用して、開始を指定できますPage、これは、Pageを自動的に読み込まれるときに、XBAPXBAPが起動します。An XBAPXBAP can use its application definition to specify a start Page, which is the Page that is automatically loaded when the XBAPXBAP is launched. これを行う、StartupUriプロパティをUniform Resource Identifier (URI)uniform resource identifier (URI)目的のPageします。You do this by setting the StartupUri property with the Uniform Resource Identifier (URI)uniform resource identifier (URI) for the desired Page.

注意

ほとんどの場合、Pageがアプリケーションと共に配置またはにコンパイルします。In most cases, the Page is either compiled into or deployed with an application. このような場合、URIURIを識別する、PageパックURIURI、これは、URIURIに準拠した、パックスキーム。In these cases, the URIURI that identifies a Page is a pack URIURI, which is a URIURI that conforms to the pack scheme. パックURIURIsについては、説明でさらにWPF におけるパック Uriします。Pack URIURIs are discussed further in Pack URIs in WPF. 以下で説明する http スキームを使用してコンテンツにナビゲートすることもできます。You can also navigate to content using the http scheme, which is discussed below.

設定できるStartupUri次の例に示すように、マークアップで宣言します。You can set StartupUri declaratively in markup, as shown in the following example.

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

この例で、StartupUri属性が設定され、相対パックURIURIHomePage.xaml を識別します。In this example, the StartupUri attribute is set with a relative pack URIURI that identifies HomePage.xaml. ときに、XBAPXBAPが起動すると、HomePage.xaml が自動的に移動し、表示します。When the XBAPXBAP is launched, HomePage.xaml is automatically navigated to and displayed. 次の図は、これを示します、 XBAPXBAP Web サーバーからを起動されました。This is demonstrated by the following figure, which shows an XBAPXBAP that was launched from a Web server.

XBAP ページXBAP page

注意

開発と展開に関する詳細についてはXBAPXBAPsを参照してくださいWPF XAML ブラウザー アプリケーションの概要WPF アプリケーションの配置します。For more information regarding the development and deployment of XBAPXBAPs, see WPF XAML Browser Applications Overview and Deploying a WPF Application.

ホスト ウィンドウのタイトル、幅、および高さの構成Configuring the Host Window's Title, Width, and Height

前の図からお気付きの 1 つは、ブラウザーとタブのパネルのタイトルが、URIURIXBAPXBAPします。One thing you may have noticed from the previous figure is that the title of both the browser and the tab panel is the URIURI for the XBAPXBAP. このタイトルは、長いだけでなく、見た目が良いわけでも、有益な情報になっているわけでもありません。Besides being long, the title is neither attractive nor informative. このため、Pageを設定してタイトルを変更する方法を提供する、WindowTitleプロパティ。For this reason, Page offers a way for you to change the title by setting the WindowTitle property. ブラウザー ウィンドウの高さと幅を構成を設定するさらに、WindowWidthWindowHeight、それぞれします。Furthermore, you can configure the width and height of the browser window by setting WindowWidth and WindowHeight, respectively.

WindowTitleWindowWidth、およびWindowHeight設定できます宣言によってマークアップでは、次の例に示すようにします。WindowTitle, WindowWidth, and WindowHeight can be set declaratively in markup, as shown in the following example.

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.HomePage"
    WindowTitle="Page Title"
    WindowWidth="500"
    WindowHeight="200">
  Hello, from the XBAP HomePage!
</Page>

結果を次の例に示します。The result is shown in the following figure.

ウィンドウのタイトル、高さ、幅Window title, height, width

一般的なXBAPXBAPはいくつかのページで構成されます。A typical XBAPXBAP comprises several pages. 別に 1 つのページから移動する最も簡単な方法が使用するには、Hyperlinkします。The simplest way to navigate from one page to another is to use a Hyperlink. 宣言を追加することができます、HyperlinkPageを使用して、Hyperlink要素で、次のマークアップに表示されます。You can declaratively add a Hyperlink to a Page by using the Hyperlink element, which is shown in the following markup.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  WindowTitle="Page With Hyperlink"
  WindowWidth="250"
  WindowHeight="250">
<Hyperlink NavigateUri="UriOfPageToNavigateTo.xaml">
  Navigate to Another Page
</Hyperlink>
</Page>

AHyperlink要素には、次が必要です。A Hyperlink element requires the following:

  • パックURIURIPageに移動するで指定されたとおり、NavigateUri属性。The pack URIURI of the Page to navigate to, as specified by the NavigateUri attribute.

  • テキストやイメージなど、ナビゲーションを開始するユーザーがクリックするコンテンツ (コンテンツをHyperlink要素が含まれてを参照してくださいHyperlink)。Content that a user can click to initiate the navigation, such as text and images (for the content that the Hyperlink element can contain, see Hyperlink).

次に示します、XBAPXBAPで、Pageを持つ、Hyperlinkします。The following figure shows an XBAPXBAP with a Page that has a Hyperlink.

ハイパーリンクを含むページPage with Hyperlink

次のものを予想どおりをクリックすると、Hyperlinkにより、XBAPXBAPに移動する、Pageによって識別される、NavigateUri属性。As you would expect, clicking the Hyperlink causes the XBAPXBAP to navigate to the Page that is identified by the NavigateUri attribute. さらに、XBAPXBAP前のエントリを追加します。Pageで最近表示したページの一覧にInternet ExplorerInternet Explorerします。Additionally, the XBAPXBAP adds an entry for the previous Page to the Recent Pages list in Internet ExplorerInternet Explorer. これを次の図に示します。This is shown in the following figure.

戻るボタンと進むボタンBack and Forward buttons

1 つからナビゲーションをサポートすることに加えてPageHyperlinkフラグメントのナビゲーションもサポートしています。As well as supporting navigation from one Page to another, Hyperlink also supports fragment navigation.

フラグメント ナビゲーションFragment Navigation

フラグメント ナビゲーションいずれかでコンテンツ フラグメントへの移動は現在、Page別またはPageします。Fragment navigation is the navigation to a content fragment in either the current Page or another Page. WPFWPF、コンテンツ フラグメントは、名前付きの要素によって格納されているコンテンツ。In WPFWPF, a content fragment is the content that is contained by a named element. 名前付き要素を持つ要素は、そのName属性に設定します。A named element is an element that has its Name attribute set. 次のマークアップを示しています、名前付きTextBlockコンテンツ フラグメントを含む要素。The following markup shows a named TextBlock element that contains a content fragment.

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    WindowTitle="Page With Fragments" >
<!-- Content Fragment called "Fragment1" -->
<TextBlock Name="Fragment1">
  Ea vel dignissim te aliquam facilisis ...
</TextBlock>
</Page>

Hyperlinkコンテンツ フラグメントに移動する、NavigateUri属性は、次を含める必要があります。For a Hyperlink to navigate to a content fragment, the NavigateUri attribute must include the following:

  • URIURIPageコンテンツ フラグメントに移動するとします。The URIURI of the Page with the content fragment to navigate to.

  • 「#」文字。A "#" character.

  • 要素の名前、Pageコンテンツ フラグメントを格納しています。The name of the element on the Page that contains the content fragment.

フラグメントURIURI形式は、次のとおりです。A fragment URIURI has the following format.

PageURI # ElementNamePageURI # ElementName

次の例を示しています、Hyperlinkコンテンツ フラグメントにナビゲートする構成されています。The following shows an example of a Hyperlink that is configured to navigate to a content fragment.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  WindowTitle="Page That Navigates To Fragment" >
<Hyperlink NavigateUri="PageWithFragments.xaml#Fragment1">
  Navigate To pack Fragment
</Hyperlink>
</Page>

注意

既定のフラグメント ナビゲーション実装について説明WPFWPFします。This section describes the default fragment navigation implementation in WPFWPF. WPFWPF 部分的に処理が必要ですが、独自のフラグメント ナビゲーション スキームを実装することもできます、NavigationService.FragmentNavigationイベント。also allows you to implement your own fragment navigation scheme which, in part, requires handling the NavigationService.FragmentNavigation event.

重要

疎でのフラグメントにナビゲートできるXAMLXAMLページ (マークアップのみXAMLXAMLを使用するファイルPageルート要素として) を使用して、ページを参照できる場合にのみHTTPHTTPします。You can navigate to fragments in loose XAMLXAML pages (markup-only XAMLXAML files with Page as the root element) only if the pages can be browsed via HTTPHTTP.

ただし、looseXAMLXAMLページは、独自のフラグメントにナビゲートできます。However, a loose XAMLXAML page can navigate to its own fragments.

中にHyperlinkにより、ユーザーを特定のナビゲーションを開始するPage、検索およびダウンロード ページの作業を行った、NavigationServiceクラス。While Hyperlink allows a user to initiate navigation to a particular Page, the work of locating and downloading the page is performed by the NavigationService class. 基本的に、NavigationServiceなど、クライアント コードの代わりのナビゲーション要求を処理する機能を提供、Hyperlinkします。Essentially, NavigationService provides the ability to process a navigation request on behalf of client code, such as the Hyperlink. さらに、NavigationService追跡したり、ナビゲーション要求の影響を与えての上位レベルのサポートを実装します。Additionally, NavigationService implements higher-level support for tracking and influencing a navigation request.

ときに、HyperlinkがクリックされたWPFWPF呼び出しNavigationService.Navigate検索とダウンロード、 Page 、指定されたパックURIURIします。When a Hyperlink is clicked, WPFWPF calls NavigationService.Navigate to locate and download the Page at the specified pack URIURI. ダウンロードしたPageがルート オブジェクトは、ダウンロードしたインスタンス オブジェクトのツリーに変換されますPageします。The downloaded Page is converted to a tree of objects whose root object is an instance of the downloaded Page. ルートへの参照をPageにオブジェクトが格納されている、NavigationService.Contentプロパティ。A reference to the root Page object is stored in the NavigationService.Content property. パックURIURIでに移動したコンテンツが格納されているため、NavigationService.Sourceプロパティ中、 NavigationService.CurrentSource 、パックを格納URIURI最後のページに移動した先の。The pack URIURI for the content that was navigated to is stored in the NavigationService.Source property, while the NavigationService.CurrentSource stores the pack URIURI for the last page that was navigated to.

注意

可能性があります、WPFWPFアプリケーションに 1 つ以上の現在アクティブなNavigationServiceします。It is possible for a WPFWPF application to have more than one currently active NavigationService. 詳細については、次を参照してください。ナビゲーション ホストこのトピックで後述します。For more information, see Navigation Hosts later in this topic.

ナビゲーション サービスによるプログラム ナビゲーションProgrammatic Navigation with the Navigation Service

について知っておく必要はありませんNavigationServiceナビゲーションを使用してマークアップで宣言によって実装されている場合Hyperlinkため、Hyperlinkを使用して、NavigationServiceあなたの代わりにします。You don't need to know about NavigationService if navigation is implemented declaratively in markup using Hyperlink, because Hyperlink uses the NavigationService on your behalf. つまり、間の直接または間接の親をHyperlinkナビゲーション ホストは、(を参照してくださいナビゲーション ホスト)、Hyperlinkを見つけて、ナビゲーション ホストのナビゲーション サービスを使用して処理できる、ナビゲーション要求。This means that, as long as either the direct or indirect parent of a Hyperlink is a navigation host (see Navigation Hosts), Hyperlink will be able to find and use the navigation host's navigation service to process a navigation request.

ただし場合もありますを使用する必要があるNavigationServiceを直接、次を含みます。However, there are situations when you need to use NavigationService directly, including the following:

  • インスタンスを作成する必要がある場合、Page既定以外のコンス トラクターを使用します。When you need to instantiate a Page using a non-default constructor.

  • プロパティを設定する必要がある場合、Pageそこに移動する前にします。When you need to set properties on the Page before you navigate to it.

  • ときに、Pageこと必要がありますにナビゲートすることができますのみが実行時に決定します。When the Page that needs to be navigated to can only be determined at run time.

このような状況では、プログラムで呼び出すことによってナビゲーションを開始するコードを記述する必要があります、Navigateのメソッド、NavigationServiceオブジェクト。In these situations, you need to write code to programmatically initiate navigation by calling the Navigate method of the NavigationService object. 参照を取得する必要がありますNavigationServiceします。That requires getting a reference to a NavigationService.

NavigationService への参照の取得Getting a Reference to the NavigationService

覆われる上の理由から、ナビゲーション ホスト セクションで、WPFWPFアプリケーションでは 1 つ以上NavigationServiceします。For reasons that are covered in the Navigation Hosts section, a WPFWPF application can have more than one NavigationService. これは、コードを見つけることが必要があることを意味するNavigationService、これは通常、NavigationService現在にナビゲートしたPageThis means that your code needs a way to find a NavigationService, which is usually the NavigationService that navigated to the current Page. 参照を取得することができます、NavigationService呼び出すことによって、 static NavigationService.GetNavigationServiceメソッド。You can get a reference to a NavigationService by calling the staticNavigationService.GetNavigationService method. 取得する、NavigationService特定にナビゲートしたPageへの参照を渡す、Pageの引数として、GetNavigationServiceメソッド。To get the NavigationService that navigated to a particular Page, you pass a reference to the Page as the argument of the GetNavigationService method. 次のコードを取得する方法を示しています、 NavigationService 、現在のPageします。The following code shows how to get the NavigationService for the current Page.

using System.Windows.Navigation;
// Get a reference to the NavigationService that navigated to this Page
NavigationService ns = NavigationService.GetNavigationService(this);
' Get a reference to the NavigationService that navigated to this Page
Dim ns As NavigationService = NavigationService.GetNavigationService(Me)

検索するショートカットとして、NavigationServicePagePage実装、NavigationServiceプロパティ。As a shortcut for finding the NavigationService for a Page, Page implements the NavigationService property. これを次の例に示します。This is shown in the following example.

using System.Windows.Navigation;
// Get a reference to the NavigationService that navigated to this Page
NavigationService ns = this.NavigationService;
' Get a reference to the NavigationService that navigated to this Page
Dim ns As NavigationService = Me.NavigationService

注意

APageのみへの参照を取得できます、NavigationServiceときPage発生させる、Loadedイベント。A Page can only get a reference to its NavigationService when Page raises the Loaded event.

ページ オブジェクトへのプログラム ナビゲーションProgrammatic Navigation to a Page Object

次の例は、使用する方法を示します、NavigationServiceにプログラムで移動する、Pageします。The following example shows how to use the NavigationService to programmatically navigate to a Page. プログラム ナビゲーションが必要なPageは移動先のみインスタンス化できる、既定以外の 1 つのコンス トラクターを使用します。Programmatic navigation is required because the Page that is being navigated to can only be instantiated using a single, non-default constructor. Page既定以外のコンス トラクターでの次のマークアップとコードに示します。The Page with the non-default constructor is shown in the following markup and code.

<Page
    x:Class="SDKSample.PageWithNonDefaultConstructor"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="PageWithNonDefaultConstructor">
  
  <!-- Content goes here -->
  
</Page>
using System.Windows.Controls;

namespace SDKSample
{
    public partial class PageWithNonDefaultConstructor : Page
    {
        public PageWithNonDefaultConstructor(string message)
        {
            InitializeComponent();

            this.Content = message;
        }
    }
}

Namespace SDKSample
    Partial Public Class PageWithNonDefaultConstructor
        Inherits Page
        Public Sub New(ByVal message As String)
            InitializeComponent()

            Me.Content = message
        End Sub
    End Class
End Namespace

Pageにナビゲートする、Page既定以外のコンス トラクターでの次のマークアップとコードに示します。The Page that navigates to the Page with the non-default constructor is shown in the following markup and code.

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.NSNavigationPage">

  <Hyperlink Click="hyperlink_Click">
    Navigate to Page with Non-Default Constructor
  </Hyperlink>

</Page>
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;

namespace SDKSample
{
    public partial class NSNavigationPage : Page
    {
        public NSNavigationPage()
        {
            InitializeComponent();
        }

        void hyperlink_Click(object sender, RoutedEventArgs e)
        {
            // Instantiate the page to navigate to
            PageWithNonDefaultConstructor page = new PageWithNonDefaultConstructor("Hello!");

            // Navigate to the page, using the NavigationService
            this.NavigationService.Navigate(page);
        }
    }
}

Namespace SDKSample
    Partial Public Class NSNavigationPage
        Inherits Page
        Public Sub New()
            InitializeComponent()
        End Sub

        Private Sub hyperlink_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Instantiate the page to navigate to
            Dim page As New PageWithNonDefaultConstructor("Hello!")

            ' Navigate to the page, using the NavigationService
            Me.NavigationService.Navigate(page)
        End Sub
    End Class
End Namespace

ときに、HyperlinkこのPageがクリックされると、ナビゲーションがインスタンス化によって開始される、Page既定以外のコンス トラクターを使用して、呼び出しに移動する、NavigationService.Navigateメソッド。When the Hyperlink on this Page is clicked, navigation is initiated by instantiating the Page to navigate to using the non-default constructor and calling the NavigationService.Navigate method. Navigate オブジェクトへの参照を受け取りますが、NavigationServiceパックではなくに移動しますURIURIします。Navigate accepts a reference to the object that the NavigationService will navigate to, rather than a pack URIURI.

パック URI によるプログラム ナビゲーションProgrammatic Navigation with a Pack URI

パックを構築する必要がある場合URIURIプログラムで (できますのみを決定する場合、パックURIURI実行時に、たとえばで)、使用することができます、NavigationService.Navigateメソッド。If you need to construct a pack URIURI programmatically (when you can only determine the pack URIURI at run time, for example), you can use the NavigationService.Navigate method. これを次の例に示します。This is shown in the following example.

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.NSUriNavigationPage">
  <Hyperlink Click="hyperlink_Click">Navigate to Page by Pack URI</Hyperlink>
</Page>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;

namespace SDKSample
{
    public partial class NSUriNavigationPage : Page
    {
        public NSUriNavigationPage()
        {
            InitializeComponent();
        }

        void hyperlink_Click(object sender, RoutedEventArgs e)
        {
            // Create a pack URI
            Uri uri = new Uri("AnotherPage.xaml", UriKind.Relative);

            // Get the navigation service that was used to 
            // navigate to this page, and navigate to 
            // AnotherPage.xaml
            this.NavigationService.Navigate(uri);
        }
    }
}

Namespace SDKSample
    Partial Public Class NSUriNavigationPage
        Inherits Page
        Public Sub New()
            InitializeComponent()
        End Sub

        Private Sub hyperlink_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Create a pack URI
            Dim uri As New Uri("AnotherPage.xaml", UriKind.Relative)

            ' Get the navigation service that was used to 
            ' navigate to this page, and navigate to 
            ' AnotherPage.xaml
            Me.NavigationService.Navigate(uri)
        End Sub
    End Class
End Namespace

現在のページの更新Refreshing the Current Page

APage同じパックがある場合はダウンロードされませんURIURIパックとしてURIURIに格納されている、NavigationService.Sourceプロパティ。A Page is not downloaded if it has the same pack URIURI as the pack URIURI that is stored in the NavigationService.Source property. 強制的にWPFWPF、現在のページを再度ダウンロードするには、呼び出すことができます、NavigationService.Refreshメソッドを次の例に示すようにします。To force WPFWPF to download the current page again, you can call the NavigationService.Refresh method, as shown in the following example.

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.NSRefreshNavigationPage">
 <Hyperlink Click="hyperlink_Click">Refresh this page</Hyperlink>
</Page>
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;

namespace SDKSample
{
    public partial class NSRefreshNavigationPage : Page
    {

Namespace SDKSample
    Partial Public Class NSRefreshNavigationPage
        Inherits Page
        void hyperlink_Click(object sender, RoutedEventArgs e)
        {
            // Force WPF to download this page again
            this.NavigationService.Refresh();
        }
    }
}
        Private Sub hyperlink_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Force WPF to download this page again
            Me.NavigationService.Refresh()
        End Sub
    End Class
End Namespace

これまでに説明したように、ナビゲーションを開始するには多くの方法があります。There are many ways to initiate navigation, as you've seen. ナビゲーションが開始されると、ナビゲーションの進行中は、追跡し、によって実装される次のイベントを使用して、ナビゲーションに影響を与える場合NavigationService:When navigation is initiated, and while navigation is in progress, you can track and influence the navigation using the following events that are implemented by NavigationService:

  • NavigatingNavigating. 新しいナビゲーションが要求されたときに発生します。Occurs when a new navigation is requested. ナビゲーションのキャンセルに使用できます。Can be used to cancel the navigation.

  • NavigationProgressNavigationProgress. ナビゲーション進行状況の情報提供を目的として、ダウンロード中に定期的に発生します。Occurs periodically during a download to provide navigation progress information.

  • NavigatedNavigated. ページの位置が特定され、ダウンロードされたときに発生します。Occurs when the page has been located and downloaded.

  • NavigationStoppedNavigationStopped. ナビゲーションが停止しているときに発生します (呼び出してStopLoading)、現在のナビゲーションの進行中に新しいナビゲーションが要求された場合またはします。Occurs when the navigation is stopped (by calling StopLoading), or when a new navigation is requested while a current navigation is in progress.

  • NavigationFailedNavigationFailed. 要求されたコンテンツにナビゲートするときにエラーが発生したときに発生します。Occurs when an error is raised while navigating to the requested content.

  • LoadCompletedLoadCompleted. ナビゲート先のコンテンツが読み込まれ、解析されて、レンダリングが開始されたときに発生します。Occurs when content that was navigated to is loaded and parsed, and has begun rendering.

  • FragmentNavigationFragmentNavigation. コンテンツ フラグメントへのナビゲーションが開始されたときに、次のタイミングで発生します。Occurs when navigation to a content fragment begins, which happens:

    • 目的のフラグメントが現在のコンテンツの場合は、すぐに発生します。Immediately, if the desired fragment is in the current content.

    • 目的のフラグメントが別のコンテンツにある場合は、ソース コンテンツが読み込まれた後で発生します。After the source content has been loaded, if the desired fragment is in different content.

ナビゲーション イベントは、次の図に示されている順序で発生します。The navigation events are raised in the order that is illustrated by the following figure.

ページ ナビゲーションのフロー チャートPage navigation flow chart

一般に、Pageこれらのイベントについて心配はありません。In general, a Page isn't concerned about these events. アプリケーションはそれらに関係し、そのため、これらのイベントはによってこと可能性が高く、Applicationクラス。It is more likely that an application is concerned with them and, for that reason, these events are also raised by the Application class:

たびにNavigationServiceイベントを発生させる、Applicationクラスは、対応するイベントを発生させます。Every time NavigationService raises an event, the Application class raises the corresponding event. Frame NavigationWindowそれぞれのスコープ内のナビゲーションを検出するために同じイベントを提供します。Frame and NavigationWindow offer the same events to detect navigation within their respective scopes.

場合によってで、Pageこれらのイベントに興味をもたれるかもしれません。In some cases, a Page might be interested in these events. たとえば、Pageが処理、NavigationService.Navigatingナビゲーションをキャンセルするかどうかを決定するイベントです。For example, a Page might handle the NavigationService.Navigating event to determine whether or not to cancel navigation away from itself. これを次の例に示します。This is shown in the following example.

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.CancelNavigationPage">
  <Button Click="button_Click">Navigate to Another Page</Button>
</Page>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;

namespace SDKSample
{
    public partial class CancelNavigationPage : Page
    {
        public CancelNavigationPage()
        {
            InitializeComponent();

            // Can only access the NavigationService when the page has been loaded
            this.Loaded += new RoutedEventHandler(CancelNavigationPage_Loaded);
            this.Unloaded += new RoutedEventHandler(CancelNavigationPage_Unloaded);
        }

        void button_Click(object sender, RoutedEventArgs e)
        {
            // Force WPF to download this page again
            this.NavigationService.Navigate(new Uri("AnotherPage.xaml", UriKind.Relative));
        }

        void CancelNavigationPage_Loaded(object sender, RoutedEventArgs e)
        {
            this.NavigationService.Navigating += new NavigatingCancelEventHandler(NavigationService_Navigating);
        }

        void CancelNavigationPage_Unloaded(object sender, RoutedEventArgs e)
        {
            this.NavigationService.Navigating -= new NavigatingCancelEventHandler(NavigationService_Navigating);
        }

        void NavigationService_Navigating(object sender, NavigatingCancelEventArgs e)
        {
            // Does the user really want to navigate to another page?
            MessageBoxResult result;
            result = MessageBox.Show("Do you want to leave this page?", "Navigation Request", MessageBoxButton.YesNo);

            // If the user doesn't want to navigate away, cancel the navigation
            if (result == MessageBoxResult.No) e.Cancel = true;
        }
    }
}

Namespace SDKSample
    Partial Public Class CancelNavigationPage
        Inherits Page
        Public Sub New()
            InitializeComponent()

            ' Can only access the NavigationService when the page has been loaded
            AddHandler Loaded, AddressOf CancelNavigationPage_Loaded
            AddHandler Unloaded, AddressOf CancelNavigationPage_Unloaded
        End Sub

        Private Sub button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Force WPF to download this page again
            Me.NavigationService.Navigate(New Uri("AnotherPage.xaml", UriKind.Relative))
        End Sub

        Private Sub CancelNavigationPage_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
            AddHandler NavigationService.Navigating, AddressOf NavigationService_Navigating
        End Sub

        Private Sub CancelNavigationPage_Unloaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
            RemoveHandler NavigationService.Navigating, AddressOf NavigationService_Navigating
        End Sub

        Private Sub NavigationService_Navigating(ByVal sender As Object, ByVal e As NavigatingCancelEventArgs)
            ' Does the user really want to navigate to another page?
            Dim result As MessageBoxResult
            result = MessageBox.Show("Do you want to leave this page?", "Navigation Request", MessageBoxButton.YesNo)

            ' If the user doesn't want to navigate away, cancel the navigation
            If result = MessageBoxResult.No Then
                e.Cancel = True
            End If
        End Sub
    End Class
End Namespace

ナビゲーション イベントにハンドラーを登録するかどうか、 Page、イベント ハンドラーの登録解除もする必要があるように前の例では、します。If you register a handler with a navigation event from a Page, as the preceding example does, you must also unregister the event handler. 方法に関して、副作用がある可能性がありますしない場合は、WPFWPFナビゲーションを記憶Pageナビゲーション履歴を使用します。If you don't, there may be side effects with respect to how WPFWPF navigation remembers Page navigation using the journal.

履歴によるナビゲーションの記憶Remembering Navigation with the Journal

WPFWPF は、戻るスタックと進むスタックの 2 つのスタックを使用して、ナビゲート元のページを記憶します。uses two stacks to remember the pages that you have navigated from: a back stack and a forward stack. 現在から移動するとPageを新しいPageを既存の前方またはPage、現在Pageに追加されます、戻るスタックします。When you navigate from the current Page to a new Page or forward to an existing Page, the current Page is added to the back stack. 現在から移動するとPage、以前にPage、現在Pageに追加されます、進むスタックします。When you navigate from the current Page back to the previous Page, the current Page is added to the forward stack. 戻るスタック、進むスタック、およびそれらを管理する機能を、まとめて履歴と呼びます。The back stack, the forward stack, and the functionality to manage them, are collectively referred to as the journal. 戻るスタックと進むスタック内の各項目のインスタンスである、JournalEntryクラスし、呼びます、仕訳します。Each item in the back stack and the forward stack is an instance of the JournalEntry class, and is referred to as a journal entry.

概念的には、履歴は、同じ方法、戻るフォワードボタンInternet ExplorerInternet Explorerの操作を行います。Conceptually, the journal operates the same way that the Back and Forward buttons in Internet ExplorerInternet Explorer do. これを次の図に示します。These are shown in the following figure.

戻るボタンと進むボタンBack and Forward buttons

XBAPXBAPsによってホストされるInternet ExplorerInternet ExplorerWPFWPFナビゲーション履歴に統合UIUIInternet ExplorerInternet Explorerします。For XBAPXBAPs that are hosted by Internet ExplorerInternet Explorer, WPFWPF integrates the journal into the navigation UIUI of Internet ExplorerInternet Explorer. 内のページを移動することができます、XBAPXBAPを使用して、戻るフォワード最近表示したページボタンInternet ExplorerInternet Explorerします。This allows users to navigate pages in an XBAPXBAP by using the Back, Forward, and Recent Pages buttons in Internet ExplorerInternet Explorer. ジャーナルは統合されませんMicrosoft Internet Explorer 6Microsoft Internet Explorer 6は同じ方法でInternet Explorer 7Internet Explorer 7または Internet Explorer 8。The journal is not integrated into Microsoft Internet Explorer 6Microsoft Internet Explorer 6 in the same way it is for Internet Explorer 7Internet Explorer 7 or Internet Explorer 8. 代わりに、WPFWPFレンダリング、代替ナビゲーションUIUIします。Instead, WPFWPF renders a substitute navigation UIUI.

重要

Internet ExplorerInternet Explorerとの間でナビゲートするときに戻す、 XBAPXBAP、アライブされなかったページの履歴項目のみが履歴に保持されます。In Internet ExplorerInternet Explorer, when a user navigates away from and back to an XBAPXBAP, only the journal entries for pages that were not kept alive are retained in the journal. ページを履歴に保持する方法の詳細については、次を参照してください。ページの有効期間と履歴このトピックで後述します。For discussion on keeping pages alive, see Page Lifetime and the Journal later in this topic.

既定で各テキストPageに表示される、最近表示したページの一覧Internet ExplorerInternet Explorerは、URIURIPageします。By default, the text for each Page that appears in the Recent Pages list of Internet ExplorerInternet Explorer is the URIURI for the Page. 多くの場合、これは、ユーザーにとって特に意味がありません。In many cases, this is not particularly meaningful to the user. 幸い、次のオプションのいずれかを使用して、テキストを変更できます。Fortunately, you can change the text using one the following options:

  1. 関連付けられているJournalEntry.Name属性の値。The attached JournalEntry.Name attribute value.

  2. Page.Title属性の値。The Page.Title attribute value.

  3. Page.WindowTitle属性の値とURIURI、現在のPageします。The Page.WindowTitle attribute value and the URIURI for the current Page.

  4. 現在の URIURIPageThe URIURI for the current Page. (既定)(Default)

これらのオプションの順序は、テキスト検索の優先順位と一致します。The order in which the options are listed matches the order of precedence for finding the text. たとえば場合、JournalEntry.Nameが設定された場合、その他の値は無視されます。For example, if JournalEntry.Name is set, the other values are ignored.

次の例では、Page.Title履歴エントリに表示されるテキストを変更する属性。The following example uses the Page.Title attribute to change the text that appears for a journal entry.

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.PageWithTitle"
    Title="This is the title of the journal entry for this page.">
</Page>
using System.Windows.Controls;

namespace SDKSample
{
    public partial class PageWithTitle : Page
    {

Namespace SDKSample
    Partial Public Class PageWithTitle
        Inherits Page
    }
}
    End Class
End Namespace

ユーザーは、ジャーナルを使用して移動できますが、戻るフォワード、および最近表示したページInternet ExplorerInternet Explorer、両方を使用して、ジャーナルを移動することもできます。によって提供される宣言およびプログラム メカニズムWPFWPFします。Although a user can navigate the journal by using the Back, Forward, and Recent Pages in Internet ExplorerInternet Explorer, you can also navigate the journal using both declarative and programmatic mechanisms provided by WPFWPF. これを行う理由の 1 つはカスタム ナビゲーションを提供するUIUIsページにします。One reason to do this is to provide custom navigation UIUIs in your pages.

によって公開されるナビゲーション コマンドを使用して宣言によって履歴ナビゲーション サポートを追加できますNavigationCommandsします。You can declaratively add journal navigation support by using the navigation commands exposed by NavigationCommands. 次の例では、使用する方法、BrowseBackナビゲーション コマンド。The following example demonstrates how to use the BrowseBack navigation command.

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.NavigationCommandsPage">
<Hyperlink Command="NavigationCommands.BrowseBack">Back</Hyperlink>
<Hyperlink Command="NavigationCommands.BrowseForward">Forward</Hyperlink>
</Page>

プログラムでの次のメンバーのいずれかを使用して、ジャーナルを移動することができます、NavigationServiceクラス。You can programmatically navigate the journal by using one of the following members of the NavigationService class:

履歴で説明したように、プログラムで操作することもナビゲーション履歴によるコンテンツ状態の保持このトピックで後述します。The journal can also be manipulated programmatically, as discussed in Retaining Content State with Navigation History later in this topic.

ページの有効期間と履歴Page Lifetime and the Journal

検討してください、XBAPXBAPリッチ コンテンツを含むいくつかのページで、グラフィックス、アニメーション、およびメディアを含むです。Consider an XBAPXBAP with several pages that contain rich content, including graphics, animations, and media. このようなページのメモリ使用量は、特にビデオやオーディオ メディアが使用されている場合、非常に大きくなることがあります。The memory footprint for pages like these could be quite large, particularly if video and audio media are used. 仕訳帳「記憶」ページに移動されていること、XBAPXBAPがすばやく、大規模で顕著な量のメモリを消費します。Given that the journal "remembers" pages that have been navigated to, such an XBAPXBAP could quickly consume a large and noticeable amount of memory.

このため、履歴の既定の動作は、格納するPageへの参照ではなく、各履歴エントリ内のメタデータをPageオブジェクト。For this reason, the default behavior of the journal is to store Page metadata in each journal entry rather than a reference to a Page object. 履歴エントリに移動したとき、Pageメタデータは、指定の新しいインスタンスを作成するために使用Pageします。When a journal entry is navigated to, its Page metadata is used to create a new instance of the specified Page. その結果、各Pageナビゲートする有効期間は、次の図で示されています。As a consequence, each Page that is navigated has the lifetime that is illustrated by the following figure.

ページの有効期間Page lifetime

既定の履歴の動作を使用してメモリの消費量に保存してできます、ページごとのレンダリングのパフォーマンスが低下する可能性があります。Page時間のかかる、大量のコンテンツがある場合に特にをすることができます。Although using the default journaling behavior can save on memory consumption, per-page rendering performance might be reduced; reinstantiating a Page can be time-intensive, particularly if it has a lot of content. 保持する必要がある場合、Pageインスタンス、journal では、これを行うための 2 つの手法に描画できます。If you need to retain a Page instance in the journal, you can draw on two techniques for doing so. 最初に、プログラムでに移動すること、Pageオブジェクトを呼び出すことによって、NavigationService.Navigateメソッド。First, you can programmatically navigate to a Page object by calling the NavigationService.Navigate method.

第 2 に、ことを指定できるWPFWPFのインスタンスを保持、Pageを設定して、journal で、KeepAliveプロパティをtrue(既定値はfalse)。Second, you can specify that WPFWPF retain an instance of a Page in the journal by setting the KeepAlive property to true (the default is false). 次の例に示すように設定できるKeepAliveマークアップで宣言します。As shown in the following example, you can set KeepAlive declaratively in markup.

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.KeepAlivePage"
    KeepAlive="True">
  
  An instance of this page is stored in the journal.
  
</Page>

有効期間、Pageは微妙に異なるされていないからでは有効のまま保持します。The lifetime of a Page that is kept alive is subtly different from one that is not. 初めて、Pageされるアライブが移動先と同じようにインスタンス化される、Pageがキープ ア ライブされません。The first time a Page that is kept alive is navigated to, it is instantiated just like a Page that is not kept alive. ただし、ためのインスタンス、Pageは保持されます、journal では、そのインスタンスを作成しませんもう一度の仕訳帳に残っている限りです。However, because an instance of the Page is retained in the journal, it is never instantiated again for as long as it remains in the journal. そのため場合、Pageたびに呼び出される必要がある初期化ロジックを持つ、Pageナビゲートする必要がありますから移動コンス トラクターにハンドラーをLoadedイベント。Consequently, if a Page has initialization logic that needs to be called every time the Page is navigated to, you should move it from the constructor into a handler for the Loaded event. 次の図に示すように、LoadedUnloadedイベントは発生するたびに、Pageがナビゲート先およびからは、それぞれします。As shown in the following figure, the Loaded and Unloaded events are still raised each time a Page is navigated to and from, respectively.

Loaded および Unloaded イベントが発生した場合When the Loaded and Unloaded events are raised

ときに、Pageがキープ アライブされず、実行しないで、次のいずれか。When a Page is not kept alive, you should not do either of the following:

  • ページへの参照、またはその一部への参照を格納する。Store a reference to it, or any part of it.

  • ページによって実装されていないイベントのイベント ハンドラーを登録する。Register event handlers with events that are not implemented by it.

これらのいずれかの方法を強制する参照を作成、Page履歴から削除された後でも、メモリに保持されます。Doing either of these will create references that force the Page to be retained in memory, even after it has been removed from the journal.

一般に、既定値を優先すべきPageは、Pageアライブします。In general, you should prefer the default Page behavior of not keeping a Page alive. ただし、これには、次のセクションで説明されている状態も関係します。However, this has state implications that are discussed in the next section.

ナビゲーション履歴によるコンテンツの状態の保持Retaining Content State with Navigation History

場合、Pageがキープ アライブされず、との間でナビゲートする場合に戻すと、データへの動作、ユーザーからデータを収集するコントロールを持っている、Pageでしょうか。If a Page is not kept alive, and it has controls that collect data from the user, what happens to the data if a user navigates away from and back to the Page? ユーザー エクスペリエンスの観点から見ると、ユーザーは以前に入力したデータが表示されることを期待します。From a user experience perspective, the user should expect to see the data they entered previously. 残念ながら、ための新しいインスタンス、Page各ナビゲーションで収集されたデータが再インスタンス化されて、データが失われたコントロールが作成されます。Unfortunately, because a new instance of the Page is created with each navigation, the controls that collected the data are reinstantiated and the data is lost.

さいわい、ジャーナルは間でデータを記憶しておくのサポートを提供Pageコントロール データを含むナビゲーション。Fortunately, the journal provides support for remembering data across Page navigations, including control data. 具体的には、各履歴Page関連付けられている一時的なコンテナーとして機能しますPage状態。Specifically, the journal entry for each Page acts as a temporary container for the associated Page state. 次の手順は、このサポートの使用方法を説明と、Pageナビゲートします。The following steps outline how this support is used when a Page is navigated from:

  1. 現在のエントリPage履歴に追加されます。An entry for the current Page is added to the journal.

  2. 状態、Page戻るスタックに追加される、そのページの履歴エントリに格納されます。The state of the Page is stored with the journal entry for that page, which is added to the back stack.

  3. 新しいPageにナビゲートするとします。The new Page is navigated to.

ときにページPageが journal を使用して移動する、次の手順が実行します。When the page Page is navigated back to, using the journal, the following steps take place:

  1. Page (戻るスタック上の最上位の履歴エントリ) をインスタンス化します。The Page (the top journal entry on the back stack) is instantiated.

  2. Pageの履歴エントリに格納された状態で更新されますが、Pageします。The Page is refreshed with the state that was stored with the journal entry for the Page.

  3. Pageに移動します。The Page is navigated back to.

WPFWPF 次のコントロールを使用すると自動的にこのサポートを使用して、 Page:automatically uses this support when the following controls are used on a Page:

場合、Page制御これらは、これらに入力されたデータをまたいで記憶されますPageナビゲーションに示すように、好きな色ListBox次の図。If a Page uses these controls, data entered into them is remembered across Page navigations, as demonstrated by the Favorite ColorListBox in the following figure.

状態を記憶するコントロールを含むページPage with controls that remember state

ときに、Page上記の一覧にないコントロールを持っているか、カスタム オブジェクトの状態が保存されると、履歴に間で状態を記憶するコードを記述する必要があります。Pageナビゲーション。When a Page has controls other than those in the preceding list, or when state is stored in custom objects, you need to write code to cause the journal to remember state across Page navigations.

少量の間で状態情報を覚えておかなければならないかどうかPageナビゲーション、依存関係プロパティを使用することができます (を参照してくださいDependencyProperty) で構成されている、FrameworkPropertyMetadata.Journalメタデータ フラグ。If you need to remember small pieces of state across Page navigations, you can use dependency properties (see DependencyProperty) that are configured with the FrameworkPropertyMetadata.Journal metadata flag.

場合、状態をPageナビゲーション間をまたいで記憶する必要があるデータの複数の部分で構成される場合があります、少ないコードでは、1 つのクラスの状態をカプセル化して実装する処理を要する、IProvideCustomContentStateインターフェイス。If the state that your Page needs to remember across navigations comprises multiple pieces of data, you may find it less code intensive to encapsulate your state in a single class and implement the IProvideCustomContentState interface.

かどうかは、1 つのさまざまな状態をナビゲートする必要がありますPageからはナビゲートせず、Page使える自体、IProvideCustomContentStateNavigationService.AddBackEntryします。If you need to navigate through various states of a single Page, without navigating from the Page itself, you can use IProvideCustomContentState and NavigationService.AddBackEntry.

クッキーCookies

もう 1 つ方法WPFWPFアプリケーションは、データを格納できますが、作成されると、cookie に次のように更新、および削除を使用して、SetCookieGetCookieメソッド。Another way that WPFWPF applications can store data is with cookies, which are created, updated, and deleted by using the SetCookie and GetCookie methods. 作成できる cookieWPFWPFクッキーと同じことを他の種類の Web アプリケーションの使用は、cookie は、中、またはアプリケーション セッション全体で、クライアント コンピューター上のアプリケーションによって格納されているデータの任意の部分。The cookies that you can create in WPFWPF are the same cookies that other types of Web applications use; cookies are arbitrary pieces of data that are stored by an application on a client machine either during or across application sessions. クッキー データは、通常、次の形式の名前と値のペアです。Cookie data typically takes the form of a name/value pair in the following format.

Name = ValueName = Value

データが渡された場合SetCookie、と共に、Uriの cookie を設定する場所、cookie は、メモリ内に作成し、のみ入手可能になったアプリケーションの現在のセッションの実行中です。When the data is passed to SetCookie, along with the Uri of the location for which the cookie should be set, a cookie is created in-memory, and it is only available for the duration of the current application session. この種類の cookie と呼びます、セッション cookieします。This type of cookie is referred to as a session cookie.

複数のアプリケーション セッションにまたがってクッキーを格納するには、次の形式を使用して、有効期限をクッキーに追加する必要があります。To store a cookie across application sessions, an expiration date must be added to the cookie, using the following format.

NAME = VALUE ; expires=DAY, DD-MMM-YYYY HH:MM:SS GMTNAME = VALUE ; expires=DAY, DD-MMM-YYYY HH:MM:SS GMT

現在の有効期限の cookie が格納されているWindowsWindowscookie の有効期限が切れるまでのインストールのインターネット一時ファイル フォルダー。A cookie with an expiration date is stored in the current WindowsWindows installation's Temporary Internet Files folder until the cookie expires. このような cookie と呼ばれる、永続的なクッキーアプリケーション セッションをまたいでいるためです。Such a cookie is known as a persistent cookie because it persists across application sessions.

セッションと永続的な cookie の両方を呼び出すことで取得した、GetCookie渡して、メソッド、Uriで cookie を設定した場所の場所のSetCookieメソッド。You retrieve both session and persistent cookies by calling the GetCookie method, passing the Uri of the location where the cookie was set with the SetCookie method.

クッキーがサポートされている方法の一部を次にWPFWPF:The following are some of the ways that cookies are supported in WPFWPF:

  • WPFWPF スタンドアロン アプリケーションとXBAPXBAPs両方を作成して cookie を管理します。standalone applications and XBAPXBAPs can both create and manage cookies.

  • によって作成された cookie をXBAPXBAPブラウザーからアクセスできます。Cookies that are created by an XBAPXBAP can be accessed from the browser.

  • 同じドメインの XBAPXBAPs は、クッキーを作成して共有できます。XBAPXBAPs from the same domain can create and share cookies.

  • XBAPXBAPs HTMLHTML同じドメインからのページは作成し、cookie を共有します。and HTMLHTML pages from the same domain can create and share cookies.

  • クッキーがディスパッチとXBAPXBAPsや looseXAMLXAMLページが Web 要求を行います。Cookies are dispatched when XBAPXBAPs and loose XAMLXAML pages make Web requests.

  • 最上位レベルの両方XBAPXBAPsXBAPXBAPsでホストされている IFRAME がクッキーにアクセスできます。Both top-level XBAPXBAPs and XBAPXBAPs hosted in IFRAMES can access cookies.

  • クッキーのサポートWPFWPFのサポートされているすべてのブラウザーで同じです。Cookie support in WPFWPF is the same for all supported browsers.

  • Internet ExplorerInternet Explorer、クッキーに関する P3P ポリシーはで受け入れられますWPFWPF、ファースト パーティおよびサード パーティ製に関して特にXBAPXBAPsします。In Internet ExplorerInternet Explorer, P3P policy that pertains to cookies is honored by WPFWPF, particularly with respect to first-party and third-party XBAPXBAPs.

構造化ナビゲーションStructured Navigation

1 つからデータを渡す必要がある場合Page別にすることができます、データに引数として渡すの既定以外のコンス トラクター、Pageします。If you need to pass data from one Page to another, you can pass the data as arguments to a non-default constructor of the Page. この手法を使用する場合しなければならないことに注意してください、Pageに移動する場合、次回、生きて、 PageWPFWPF再インスタンス化、Page既定のコンス トラクターを使用しています。Note that if you use this technique, you must keep the Page alive; if not, the next time you navigate to the Page, WPFWPF reinstantiates the Page by using the default constructor.

または、Page渡す必要があるデータと設定されているプロパティを実装することができます。Alternatively, your Page can implement properties that are set with the data that needs to be passed. 処理がただし、注意が必要になります、ときに、Page必要がありますを渡すためにデータを戻す、Pageにナビゲートしました。Things become tricky, however, when a Page needs to pass data back to the Page that navigated to it. 問題があるナビゲーションはネイティブでサポート メカニズムを保証する、Pageからは、ナビゲート後に返されます。The problem is that navigation doesn't natively support mechanisms for guaranteeing that a Page will be returned to after it is navigated from. 基本的に、ナビゲーションは、"呼び出す/戻る" というセマンティクスをサポートしていません。Essentially, navigation doesn't support call/return semantics. この問題を解決するWPFWPF提供、PageFunction<T>いることを確認するために使用できるクラス、Pageが予測可能な構造化された方法で返されます。To solve this problem, WPFWPF provides the PageFunction<T> class that you can use to ensure that a Page is returned to in a predictable and structured fashion. 詳細については、次を参照してください。構造化ナビゲーションの概要します。For more information, see Structured Navigation Overview.

NavigationWindow クラスThe NavigationWindow Class

ここまでで、ナビゲート可能なコンテンツを含むアプリケーションをビルドするために使用する可能性が最も高いナビゲーション サービスの全容を説明しました。To this point, you've seen the gamut of navigation services that you are most likely to use to build applications with navigable content. これらのサービスは、のコンテキストで説明したXBAPXBAPsに限定されてはいませんが、XBAPXBAPsします。These services were discussed in the context of XBAPXBAPs, although they are not limited to XBAPXBAPs. 最新のオペレーティング システムと Windows アプリケーションにブラウザー スタイルのナビゲーションをスタンドアロン アプリケーションに組み込む現代のユーザーのブラウザーの経験を活用します。Modern operating systems and Windows applications take advantage of the browser experience of modern users to incorporate browser-style navigation into standalone applications. 一般的な例は、次のとおりです。Common examples include:

  • Word の類義語辞典:選択された語を移動します。Word Thesaurus: Navigate word choices.

  • ファイル エクスプ ローラー:ファイルとフォルダーを移動します。File Explorer: Navigate files and folders.

  • ウィザード:複雑なタスクの間で移動できる複数のページを分割します。Wizards: Breaking down a complex task into multiple pages that can be navigated between. たとえば、Windows コンポーネント ウィザードを追加して、Windows の機能の削除を処理するなどです。An example is the Windows Components Wizard that handles adding and removing Windows features.

ブラウザー スタイルのナビゲーションをスタンドアロン アプリケーションに組み込むを使用することができます、NavigationWindowクラス。To incorporate browser-style navigation into your standalone applications, you can use the NavigationWindow class. NavigationWindow 派生したWindowが拡張され、同じナビゲーション サポートとXBAPXBAPsを提供します。NavigationWindow derives from Window and extends it with the same support for navigation that XBAPXBAPs provide. 使用することができますNavigationWindowスタンドアロン アプリケーションのメイン ウィンドウ、またはダイアログ ボックスなどの 2 次ウィンドウとして。You can use NavigationWindow as either the main window of your standalone application or as a secondary window such as a dialog box.

実装する、NavigationWindowの最上位レベルのほとんどのクラスと同様に、 WPFWPF (WindowPageなど)、マークアップと分離コードの組み合わせを使用します。To implement a NavigationWindow, as with most top-level classes in WPFWPF (Window, Page, and so on), you use a combination of markup and code-behind. これを次の例に示します。This is shown in the following example.

<NavigationWindow
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.MainWindow" 
    Source="HomePage.xaml"/>
using System.Windows.Navigation;

namespace SDKSample
{
    public partial class MainWindow : NavigationWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

Namespace SDKSample
    Partial Public Class MainWindow
        Inherits NavigationWindow
        Public Sub New()
            InitializeComponent()
        End Sub
    End Class
End Namespace

このコードを作成、NavigationWindowに自動的にナビゲートする、 Page (HomePage.xaml) ときに、NavigationWindowが開きます。This code creates a NavigationWindow that automatically navigates to a Page (HomePage.xaml) when the NavigationWindow is opened. 場合、NavigationWindowアプリケーションのメイン ウィンドウは、使用することができます、StartupUri属性を起動します。If the NavigationWindow is the main application window, you can use the StartupUri attribute to launch it. これを次のマークアップに示します。This is shown in the following markup.

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    StartupUri="MainWindow.xaml" />

次に示します、NavigationWindowスタンドアロン アプリケーションのメイン ウィンドウとして。The following figure shows the NavigationWindow as the main window of a standalone application.

メイン ウィンドウA main window

図からを確認できます、NavigationWindowでは設定されなかった場合でも、タイトルが付いて、NavigationWindow前の例のコードを実装します。From the figure, you can see that the NavigationWindow has a title, even though it wasn't set in the NavigationWindow implementation code from the preceding example. タイトルを設定を使用して、代わりに、WindowTitleプロパティで、次のコードに示します。Instead, the title is set using the WindowTitle property, which is shown in the following code.

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    Title="Home Page"
    WindowTitle="NavigationWindow">
</Page>

設定、WindowWidthWindowHeightプロパティにも影響、NavigationWindowします。Setting the WindowWidth and WindowHeight properties also affects the NavigationWindow.

通常、実装する独自NavigationWindow動作や外観をカスタマイズする必要がある場合。Usually, you implement your own NavigationWindow when you need to customize either its behavior or its appearance. どちらも行わない場合は、ショートカットを使用できます。If you do neither, you can use a shortcut. パックを指定する場合URIURIPageとして、StartupUriをスタンドアロン アプリケーションでApplicationが自動的に作成、NavigationWindowホストに、 PageIf you specify the pack URIURI of a Page as the StartupUri in a standalone application, Application automatically creates a NavigationWindow to host the Page. 次のマークアップは、この方法を示しています。The following markup shows how to enable this.

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    StartupUri="HomePage.xaml" />

セカンダリ アプリケーション ウィンドウにする ダイアログ ボックスなどをするかどうか、NavigationWindowを開きます次の例では、コードを使用することができます。If you want a secondary application window such as a dialog box to be a NavigationWindow, you can use the code in the following example to open it.

// Open a navigation window as a dialog box
NavigationWindowDialogBox dlg = new NavigationWindowDialogBox();
dlg.Source = new Uri("HomePage.xaml", UriKind.Relative);
dlg.Owner = this;
dlg.ShowDialog();
' Open a navigation window as a dialog box
Dim dlg As New NavigationWindowDialogBox()
dlg.Source = New Uri("HomePage.xaml", UriKind.Relative)
dlg.Owner = Me
dlg.ShowDialog()

次の図に、結果を示します。The following figure shows the result.

ダイアログ ボックスA dialog box

ご覧のとおり、NavigationWindowが表示されますInternet ExplorerInternet Explorer-スタイル戻るフォワード履歴をナビゲートできるようにボタン。As you can see, NavigationWindow displays Internet ExplorerInternet Explorer-style Back and Forward buttons that allow users to navigate the journal. これらのボタンは、次の図に示されているように、同じユーザー エクスペリエンスを提供します。These buttons provide the same user experience, as shown in the following figure.

Navigationwindow の前後Back and Forward buttons in a NavigationWindow

非表示にする場合は、ページは、独自の履歴ナビゲーション サポートと UI を提供する、戻るフォワードで表示されるボタンNavigationWindowの値を設定して、 ShowsNavigationUI プロパティfalse.If your pages provide their own journal navigation support and UI, you can hide the Back and Forward buttons displayed by NavigationWindow by setting the value of the ShowsNavigationUI property to false.

カスタマイズのサポートを使用する代わりに、WPFWPFを置き換える、UIUINavigationWindow自体。Alternatively, you can use customization support in WPFWPF to replace the UIUI of the NavigationWindow itself.

Frame クラスThe Frame Class

両方のブラウザーとNavigationWindowナビゲート可能なコンテンツをホストを windows には。Both the browser and NavigationWindow are windows that host navigable content. 場合によっては、アプリケーションには、ウィンドウ全体でホストする必要のないコンテンツがあることもあります。In some cases, applications have content that does not need to be hosted by an entire window. このようなコンテンツは、代わりに、他のコンテンツ内でホストされます。Instead, such content be hosted inside other content. その他のコンテンツにナビゲート可能なコンテンツを挿入するにを使用して、Frameクラス。You can insert navigable content into other content by using the Frame class. Frame 同じサポートを提供しますNavigationWindowXBAPXBAPsします。Frame provides the same support as NavigationWindow and XBAPXBAPs.

次の例は、追加する方法を示します、FramePageを使用して宣言によって、Frame要素。The following example shows how to add a Frame to a Page declaratively by using the Frame element.

<Page 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  WindowTitle="Page that Hosts a Frame"
  WindowWidth="250"
  WindowHeight="250">
<Frame Source="FramePage1.xaml" />
</Page>

このマークアップは、Sourceの属性、Frameパックを持つ要素URIURIPageFrame最初にナビゲートする必要があります。This markup sets the Source attribute of the Frame element with a pack URIURI for the Page that the Frame should initially navigate to. 次に示します、XBAPXBAPで、Pageを持つ、Frameいくつかのページ間を移動します。The following figure shows an XBAPXBAP with a Page that has a Frame that has navigated between several pages.

複数のページ間を移動したフレームA frame that has navigated between multiple pages

のみでは、使用する必要はありませんFrameコンテンツの内部に、Pageします。You don't only have to use Frame inside the content of a Page. 共通するホストも、Frameコンテンツの内部に、Windowします。It is also common to host a Frame inside the content of a Window.

既定では、Frameのみ別の履歴がない場合は、独自の履歴を使用します。By default, Frame only uses its own journal in the absence of another journal. 場合、Frame内でホストされているコンテンツの一部である、NavigationWindowまたはXBAPXBAPFrameが属している、ジャーナルを使用して、NavigationWindowまたはXBAPXBAPIf a Frame is part of content that is hosted inside either a NavigationWindow or an XBAPXBAP, Frame uses the journal that belongs to the NavigationWindow or XBAPXBAP. 場合によっては、ただし、Frame独自の履歴を担当する必要があります。Sometimes, though, a Frame might need to be responsible for its own journal. これを行う理由の 1 つがによってホストされているページ内で履歴ナビゲーションを許可するには、Frameします。One reason to do so is to allow journal navigation within the pages that are hosted by a Frame. これを次の図に示します。This is illustrated by the following figure.

フレームとページのダイアグラムFrame and Page diagram

この場合、構成することができます、Frame設定して、独自の履歴を使用する、JournalOwnershipのプロパティ、FrameOwnsJournalします。In this case, you can configure the Frame to use its own journal by setting the JournalOwnership property of the Frame to OwnsJournal. これを次のマークアップに示します。This is shown in the following markup.

<Page 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  WindowTitle="Page that Hosts a Frame"
  WindowWidth="250"
  WindowHeight="250">
<Frame Source="FramePage1.xaml" JournalOwnership="OwnsJournal" />
</Page>

次の図は内での移動の効果を示しています、Frame独自の履歴を使用します。The following figure illustrates the effect of navigating within a Frame that uses its own journal.

独自の履歴を使用するフレームA frame that uses its own journal

通知の履歴エントリはナビゲーションによって示されているUIUIで、FrameではなくInternet ExplorerInternet Explorerします。Notice that the journal entries are shown by the navigation UIUI in the Frame, rather than by Internet ExplorerInternet Explorer.

注意

場合、Frameでホストされているコンテンツの一部である、 WindowFrame独自の履歴を使用し、その結果、独自のナビゲーションを表示します。UIUIします。If a Frame is part of content that is hosted in a Window, Frame uses its own journal and, consequently, displays its own navigation UIUI.

ユーザー エクスペリエンスが必要な場合、Frameナビゲーションを表示することがなく、独自の履歴を提供するUIUI、ナビゲーションを非表示にすることができますUIUIを設定して、NavigationUIVisibilityHiddenします。If your user experience requires a Frame to provide its own journal without showing the navigation UIUI, you can hide the navigation UIUI by setting the NavigationUIVisibility to Hidden. これを次のマークアップに示します。This is shown in the following markup.

<Page 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  WindowTitle="Page that Hosts a Frame"
  WindowWidth="250"
  WindowHeight="250">
<Frame 
  Source="FramePage1.xaml" 
  JournalOwnership="OwnsJournal" 
  NavigationUIVisibility="Hidden" />
</Page>

Frame NavigationWindowナビゲーション ホストと呼ばれるクラスします。Frame and NavigationWindow are classes that are known as navigation hosts. Aナビゲーション ホストに移動して、コンテンツを表示できるクラスです。A navigation host is a class that can navigate to and display content. これを実現する各ナビゲーション ホストは、独自NavigationServiceジャーナルとします。To accomplish this, each navigation host uses its own NavigationService and journal. ナビゲーション ホストの基本的な構造を次の図に示します。The basic construction of a navigation host is shown in the following figure.

ナビゲーターのダイアグラムNavigator diagrams

これにより、基本的に、NavigationWindowFrame同等ナビゲーションをサポートする、XBAPXBAPブラウザーでホストされている場合に提供します。Essentially, this allows NavigationWindow and Frame to provide the same navigation support that an XBAPXBAP provides when hosted in the browser.

使用しただけでなくNavigationServiceと、journal では、ナビゲーション ホストは、同じメンバーを実装するNavigationServiceを実装します。Besides using NavigationService and a journal, navigation hosts implement the same members that NavigationService implements. これを次の図に示します。This is illustrated by the following figure.

フレームおよび NavigationWindow 内のジャーナルA journal in a Frame and in a NavigationWindow

これにより、これらのメンバーに対して直接、ナビゲーション サポートをプログラミングできます。This allows you to program navigation support directly against them. カスタム ナビゲーションを提供する必要がある場合は、これを検討できますUIUIFrameでホストされる、Windowします。You may consider this if you need to provide a custom navigation UIUI for a Frame that is hosted in a Window. さらに、両方の種類の実装を含む、追加のナビゲーション関連のメンバー BackStack (NavigationWindow.BackStackFrame.BackStack) とForwardStack(NavigationWindow.ForwardStackFrame.ForwardStack)、バックアップの履歴エントリを列挙できますスタックが作成され、それぞれ、スタックを転送します。Furthermore, both types implement additional, navigation-related members, including BackStack (NavigationWindow.BackStack, Frame.BackStack) and ForwardStack (NavigationWindow.ForwardStack, Frame.ForwardStack), which allow you to enumerate the journal entries in the back stack and forward stack, respectively.

前に述べたように、アプリケーション内に複数の履歴が存在することがあります。As mentioned earlier, more than one journal can exist within an application. 次の図は、この例を示しています。The following figure provides an example of when this can happen.

1 つのアプリケーション内の複数の履歴Multiple journals within one application

このトピックでは、全体でPageと packXBAPXBAPsのさまざまなナビゲーション機能のデモンストレーションに使用されているWPFWPFします。Throughout this topic, Page and pack XBAPXBAPs have been used to demonstrate the various navigation capabilities of WPFWPF. ただし、Pageつまり移動できるコンテンツと pack の唯一の型でないアプリケーションにコンパイルXBAPXBAPsコンテンツを識別する唯一の方法はありません。However, a Page that is compiled into an application is not the only type of content that can be navigated to, and pack XBAPXBAPs aren't the only way to identify content.

緩やかに移動できますもここに示す、XAMLXAMLファイル、HTMLHTMLファイル、およびオブジェクト。As this section demonstrates, you can also navigate to loose XAMLXAML files, HTMLHTML files, and objects.

LooseXAMLXAMLファイルは、次の特性を持つファイル。A loose XAMLXAML file is a file with the following characteristics:

  • のみを含むXAMLXAML(つまり、コードなし)。Contains only XAMLXAML (that is, no code).

  • 適切な名前空間宣言がある。Has an appropriate namespace declaration.

  • .xaml ファイル名拡張子を持つ。Has the .xaml file name extension.

たとえば、loose として格納されている次の内容XAMLXAMLPerson.xaml ファイルします。For example, consider the following content that is stored as a loose XAMLXAML file, Person.xaml.

<!-- Person.xaml -->
<TextBlock xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <TextBlock FontWeight="Bold">Name:</TextBlock>
  <TextBlock>Nancy Davolio</TextBlock>
  <LineBreak />
  <TextBlock FontWeight="Bold">Favorite Color:</TextBlock>
  <TextBlock>Yellow</TextBlock>
</TextBlock>

ファイルをダブルクリックすると、ブラウザーが開き、コンテンツにナビゲートして、コンテンツを表示します。When you double-click the file, the browser opens and navigates to and displays the content. これを次の図に示します。This is shown in the following figure.

Person.XAML ファイルのコンテンツの表示Display of the content in the Person.XAML file

Loose を表示するXAMLXAML、次からのファイル。You can display a loose XAMLXAML file from the following:

  • ローカル コンピューター、イントラネット、またはインターネット上の Web サイト。A Web site on the local machine, the intranet, or the Internet.

  • A汎用名前付け規則 (UNC)Universal Naming Convention (UNC)ファイル共有。A 汎用名前付け規則 (UNC)Universal Naming Convention (UNC) file share.

  • ローカル ディスク。The local disk.

LooseXAMLXAMLファイルは、ブラウザーのお気に入りに追加できるか、ブラウザーのホーム ページにあります。A loose XAMLXAML file can be added to the browser's favorites, or be the browser's home page.

注意

公開と疎起動の詳細についてはXAMLXAML、ページを参照してくださいWPF アプリケーションの配置します。For more information about publishing and launching loose XAMLXAML pages, see Deploying a WPF Application.

Loose に関して制限事項の 1 つXAMLXAMLが部分信頼で実行しても安全なコンテンツをホストすることのみできます。One limitation with respect to loose XAMLXAML is that you can only host content that is safe to run in partial trust. たとえば、 Window loose のルート要素にすることはできませんXAMLXAMLファイル。For example, Window cannot be the root element of a loose XAMLXAML file. 詳細については、次を参照してください。 WPF 部分信頼セキュリティします。For more information, see WPF Partial Trust Security.

移動できますもご想像のとおり、HTMLHTMLします。As you might expect, you can also navigate to HTMLHTML. 単に提供する必要があります、 URIURI http スキームを使用します。You simply need to provide a URIURI that uses the http scheme. たとえば、次XAMLXAMLを示しています、Frameにナビゲートする、HTMLHTMLページ。For example, the following XAMLXAML shows a Frame that navigates to an HTMLHTML page.

<Frame Source="http://www.microsoft.com/default.aspx" />

移動するHTMLHTML特殊なアクセス許可が必要です。Navigating to HTMLHTML requires special permissions. たとえばから移動することはできません、XBAPXBAPインターネット ゾーン部分信頼セキュリティ サンド ボックスで実行されています。For example, you can't navigate from an XBAPXBAP that is running in the Internet zone partial trust security sandbox. 詳細については、次を参照してください。 WPF 部分信頼セキュリティします。For more information, see WPF Partial Trust Security.

WebBrowserサポートを制御HTMLHTMLドキュメントのホスティング、ナビゲーション、およびスクリプト/マネージ コードの相互運用性。The WebBrowser control supports HTMLHTML document hosting, navigation and script/managed code interoperability. 詳細についてはに関する、WebBrowserコントロールを参照してくださいWebBrowserします。For detailed information regarding the WebBrowser control, see WebBrowser.

ようなFrameに移動する、HTMLHTMLを使用してWebBrowser特殊なアクセス許可が必要です。Like Frame, navigating to HTMLHTML using WebBrowser requires special permissions. たとえば、部分的に信頼されたアプリケーションから移動できますにのみHTMLHTML起点のサイトにあります。For example, from a partial-trust application, you can navigate only to HTMLHTML located at the site of origin. 詳細については、次を参照してください。 WPF 部分信頼セキュリティします。For more information, see WPF Partial Trust Security.

カスタム オブジェクトとして格納されているデータがある場合は、そのデータを表示する方法の 1 つは、作成、Pageそれらのオブジェクトにバインドされているコンテンツを含む (を参照してくださいデータ バインディングの概要)。If you have data that is stored as custom objects, one way to display that data is to create a Page with content that is bound to those objects (see Data Binding Overview). オブジェクトを表示するためだけにページ全体を作成するオーバーヘッドが必要ない場合には、代わりに、オブジェクトに直接ナビゲートすることもできます。If you don't need the overhead of creating an entire page just to display the objects, you can navigate directly to them instead.

検討してください、Person次のコードで実装されているクラス。Consider the Person class that is implemented in the following code.

using System.Windows.Media;

namespace SDKSample
{
    public class Person
    {
        string name;
        Color favoriteColor;

        public Person() { }
        public Person(string name, Color favoriteColor)
        {
            this.name = name;
            this.favoriteColor = favoriteColor;
        }

        public string Name
        {
            get { return this.name; }
            set { this.name = value; }
        }

        public Color FavoriteColor
        {
            get { return this.favoriteColor; }
            set { this.favoriteColor = value; }
        }
    }
}

Namespace SDKSample
    Public Class Person
        Private _name As String
        Private _favoriteColor As Color

        Public Sub New()
        End Sub
        Public Sub New(ByVal name As String, ByVal favoriteColor As Color)
            Me._name = name
            Me._favoriteColor = favoriteColor
        End Sub

        Public Property Name() As String
            Get
                Return Me._name
            End Get
            Set(ByVal value As String)
                Me._name = value
            End Set
        End Property

        Public Property FavoriteColor() As Color
            Get
                Return Me._favoriteColor
            End Get
            Set(ByVal value As Color)
                Me._favoriteColor = value
            End Set
        End Property
    End Class
End Namespace

それに移動するを呼び出す、NavigationWindow.Navigateメソッドは、次のコードに示すようにします。To navigate to it, you call the NavigationWindow.Navigate method, as demonstrated by the following code.

<Page 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="SDKSample.HomePage"
  WindowTitle="Page that Navigates to an Object">
<Hyperlink Name="hyperlink" Click="hyperlink_Click">
  Navigate to Nancy Davolio
</Hyperlink>
</Page>
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace SDKSample
{
    public partial class HomePage : Page
    {
        public HomePage()
        {
            InitializeComponent();
        }

        void hyperlink_Click(object sender, RoutedEventArgs e)
        {
            Person person = new Person("Nancy Davolio", Colors.Yellow);
            this.NavigationService.Navigate(person);
        }
    }
}

Namespace SDKSample
    Partial Public Class HomePage
        Inherits Page
        Public Sub New()
            InitializeComponent()
        End Sub

        Private Sub hyperlink_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            Dim person As New Person("Nancy Davolio", Colors.Yellow)
            Me.NavigationService.Navigate(person)
        End Sub
    End Class
End Namespace

次の図に、結果を示します。The following figure shows the result.

クラスに移動するページA page that navigates to a class

この図には、役立つものが何も表示されていません。From this figure, you can see that nothing useful is displayed. 表示される値の戻り値は、実際には、ToStringのメソッド、 Personオブジェクト。 既定では、これは、唯一の値WPFWPFオブジェクトの表示に使用できます。In fact, the value that is displayed is the return value of the ToString method for the Person object; by default, this is the only value that WPFWPF can use to represent your object. オーバーライドして、ToStringに意味のある情報を返すことが、それでもメソッドは文字列値のみができます。You could override the ToString method to return more meaningful information, although it will still only be a string value. 1 つの手法が使用することができますのプレゼンテーション機能を活用したWPFWPFデータ テンプレートを使用することです。One technique you can use that takes advantage of the presentation capabilities of WPFWPF is to use a data template. データ テンプレートを実装することができますをWPFWPF特定の種類のオブジェクトと関連付けることができます。You can implement a data template that WPFWPF can associate with an object of a particular type. 次のコードはデータ テンプレートをPersonオブジェクト。The following code shows a data template for the Person object.

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:SDKSample" 
    x:Class="SDKSample.App"
    StartupUri="HomePage.xaml">

  <Application.Resources>

    <!-- Data Template for the Person Class -->
    <DataTemplate DataType="{x:Type local:Person}">
      <TextBlock xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
        <TextBlock FontWeight="Bold">Name:</TextBlock>
        <TextBlock Text="{Binding Path=Name}" />
        <LineBreak />
        <TextBlock FontWeight="Bold">Favorite Color:</TextBlock>
        <TextBlock Text="{Binding Path=FavoriteColor}" />
      </TextBlock>
    </DataTemplate>
    
  </Application.Resources>

</Application>

ここでは、データ テンプレートに関連付けられている、Person型を使用して、x:Typeのマークアップ拡張機能、DataType属性。Here, the data template is associated with the Person type by using the x:Type markup extension in the DataType attribute. データ テンプレートにバインドし、TextBlock要素 (を参照してくださいTextBlock) のプロパティに、Personクラス。The data template then binds TextBlock elements (see TextBlock) to the properties of the Person class. 次の図は、の更新された外観を示しています。、Personオブジェクト。The following figure shows the updated appearance of the Person object.

データ テンプレートを持つクラスへの移動Navigating to a class that has a data template

この方法の利点は、データ テンプレートを再利用して、アプリケーションの任意の場所で オブジェクトを一貫して表示できることによって得られる一貫性です。An advantage of this technique is the consistency you gain by being able to reuse the data template to display your objects consistently anywhere in your application.

データ テンプレートの詳細については、次を参照してください。データ テンプレートの概要します。For more information on data templates, see Data Templating Overview.

セキュリティSecurity

WPFWPF ナビゲーション サポートによってXBAPXBAPsに、インターネットとの間で移動するのには、サード パーティ コンテンツをホストするアプリケーション。navigation support allows XBAPXBAPs to be navigated to across the Internet, and it allows applications to host third-party content. 有害な動作からのアプリケーションとユーザーの両方を保護するWPFWPFのさまざまな記載されているセキュリティ機能を提供します。セキュリティWPF 部分信頼セキュリティします。To protect both applications and users from harmful behavior, WPFWPF provides a variety of security features that are discussed in Security and WPF Partial Trust Security.

関連項目See also