Page.KeepAlive プロパティ


Page のインスタンスがナビゲーション履歴に保持されるかどうかを示す値を取得または設定します。Gets or sets a value that indicates whether the Page instance is retained in navigation history.

 property bool KeepAlive { bool get(); void set(bool value); };
public bool KeepAlive { get; set; }
member this.KeepAlive : bool with get, set
Public Property KeepAlive As Boolean



ナビゲーション履歴に Page のインスタンスを保持する場合は true。それ以外の場合は falsetrue if the Page instance is retained in navigation history; otherwise, false. 既定では、 falseです。The default is false.

次の例では、XAMLXAML を使用して、複数のナビゲーションで Page クラスのインスタンスを保持する方法を示します。The following example shows how to use XAMLXAML to retain an instance of the Page class across multiple navigations.

<Page x:Class="CSharp.HomePage"
using System;
using System.Windows;
using System.Windows.Controls;

namespace CSharp
    public partial class HomePage : Page
        public HomePage()

            // Keep this page in navigation history
            this.KeepAlive = true;

Imports System.Windows
Imports System.Windows.Controls

Namespace VisualBasic
    Partial Public Class HomePage
        Inherits Page
        Public Sub New()

            ' Keep this page in navigation history
            Me.KeepAlive = True
        End Sub

    End Class
End Namespace


ページが最初に移動されると、Page クラスの新しいインスタンスが作成されます。When a page is first navigated to, a new instance of the Page class is created. ページが (戻るまたは forward) から移動すると、ページのエントリがナビゲーション履歴に追加されます。When a page is navigated away from (either back or forward), an entry for the page is added to navigation history. 既定では、エントリはページオブジェクトを参照しません。By default, the entry does not reference the page object. このエントリには、ページのパック URI (uniform resource identifier) が含まれています。Instead, the entry contains a pack uniform resource identifier (URI) for the page. ページのエントリにナビゲーション履歴を使用して移動すると、そのページの新しいインスタンスを作成するためにパック URI が使用されます。When the entry for the page is navigated to using navigation history, the pack URI is used to create a new instance of the page. この動作は、メモリ使用量が過剰にならないようにするための既定の動作です。ページインスタンスを保持することで、特に、大量のコンテンツを含むメモリをすぐに使用できます。This behavior is the default, to avoid excessive memory use: retaining page instances can quickly consume memory, particularly those with a nontrivial amount of content. この問題は、ナビゲーション履歴のバックスタックと転送スタックに格納できるエントリ数に制限がないという事実によって強化されています。This problem is augmented by the fact that there is no limit to the number of entries that can be stored in the back and forward stacks of navigation history. これに対して、ページのパック Uri の格納は、実質的にはメモリの消費に影響しません。In contrast, storing pack URIs for pages has virtually no impact on memory consumption.

ページの新しいインスタンスを作成する主な効果は、ページのあるインスタンスから別のインスタンスにページの状態が記憶されないことです。The main side effect of creating new instances of a page is that page state is not remembered from one instance of a page to another. このような場合、Windows Presentation Foundation には、状態を記憶するためのいくつかの方法が用意されています。In these cases, Windows Presentation Foundation offers several techniques for remembering state.

ページを保持するには、KeepAlive プロパティを true に設定します (既定値は false)。To keep a page alive, you set the KeepAlive property to true (the default is false).


インスタンス化され、コードのみを使用して移動されるページ (たとえば、Navigateを呼び出す) は、自動的に保持されます。Pages that are instantiated and navigated to using only code (for example, calling Navigate), are automatically kept alive.

次のことを行う必要がある場合を除き、KeepAlivetrue に設定しないようにしてください。You should avoid setting KeepAlive to true unless you need to:

  • ページに大量のコンテンツがある場合は、インスタンス化に時間がかかることがあります。When a page has a lot of content, it may take a long time to instantiate. ページが保持されておらず、ページが頻繁に移動している場合は、ページを継続的にインスタンス化するコストがユーザーエクスペリエンスに悪影響を与える可能性があります。If the page is not kept alive, and the page is frequently navigated to, the cost of constantly instantiating the page may have a negative impact on the user experience. ただし、パフォーマンスの観点からは、既定の設定を利用し、アプリケーションのパフォーマンスをプロファイリングする必要があります。アプリケーションに必要な範囲を下回る読み込み時間があるページをテストする場合は、維持されるようにページを構成することは、問題を解決する方法の1つです。However, from a performance perspective, you should rely on the default settings and profile your application's performance; if testing identifies pages with load times that fall below the range required for your application, configuring the pages to be kept alive may be one way to solve the problem.


アクティブになっているページのエントリは、ユーザーが XAML ブラウザー アプリケーション (XBAP)XAML browser application (XBAP)に移動した場合に、XAML ブラウザー アプリケーション (XBAP)XAML browser application (XBAP) のナビゲーション履歴に保持されません。Entries for pages that are kept alive are not retained in navigation history of an XAML ブラウザー アプリケーション (XBAP)XAML browser application (XBAP) if a user navigates away from and back to the XAML ブラウザー アプリケーション (XBAP)XAML browser application (XBAP). 保持されていないページのジャーナルエントリだけがナビゲーション履歴に保持されます。Only journal entries for pages that are not kept alive are retained in navigation history.

依存プロパティ情報Dependency Property Information

識別子フィールドIdentifier field KeepAliveProperty
メタデータプロパティが true に設定されるMetadata properties set to true なしNone


この依存関係プロパティのメタデータ型は PropertyMetadataであり、FrameworkPropertyMetadataではありません。The metadata type on this dependency property is PropertyMetadata, not FrameworkPropertyMetadata.