次の方法で共有


Page.KeepAlive プロパティ

定義

Page のインスタンスがナビゲーション履歴に保持されるかどうかを示す値を取得または設定します。

public:
 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。それ以外の場合は false。 既定値は、false です。

次の例は、XAML を使用して、複数のナビゲーション間で クラスのインスタンスを Page 保持する方法を示しています。

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    WindowTitle="HomePage"
    KeepAlive="True"
    >
</Page>
<Page x:Class="CSharp.HomePage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  WindowTitle="HomePage"
    >
</Page>
using System;
using System.Windows;
using System.Windows.Controls;

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

            // 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()
            InitializeComponent()

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

    End Class
End Namespace

注釈

ページが最初に 移動すると、 クラスの Page 新しいインスタンスが作成されます。 ページが (前後に) 移動すると、そのページのエントリがナビゲーション履歴に追加されます。 既定では、エントリはページ オブジェクトを参照しません。 代わりに、エントリにはページのパック の UNIFORM リソース識別子 (URI) が含まれています。 ナビゲーション履歴を使用してページのエントリが に移動すると、ページの新しいインスタンスを作成するためにパック URI が使用されます。 この動作は、メモリの過剰な使用を避けるために、既定値です。ページ インスタンスを保持すると、特にコンテンツの量が多い場合に、メモリをすばやく消費できます。 この問題は、ナビゲーション履歴の前後のスタックに格納できるエントリの数に制限が存在しないという事実によって強化されています。 これに対し、ページのパック URI を格納しても、メモリ消費量には実質的に影響しません。

ページの新しいインスタンスを作成する主な副作用は、ページの状態がページのインスタンス間で記憶されないことです。 このような場合、Windows Presentation Foundationには状態を記憶するためのいくつかの手法が用意されています。

ページを維持するには、 プロパティを にtrue設定します KeepAlive (既定値は falseです)。

注意

インスタンス化され、コードのみを使用して に移動されたページ (呼び出し Navigateなど) は、自動的に有効な状態に保たれます。

以下を行う必要がない限り、 を にtrue設定KeepAliveしないでください。

  • ページに大量のコンテンツがある場合、インスタンス化に長い時間がかかる場合があります。 ページが維持されず、ページが頻繁に移動される場合、ページを絶えずインスタンス化するコストがユーザー エクスペリエンスに悪影響を及ぼす可能性があります。 ただし、パフォーマンスの観点からは、既定の設定に依存し、アプリケーションのパフォーマンスをプロファイルする必要があります。アプリケーションに必要な範囲を下回る読み込み時間を持つページがテストによって識別される場合は、ページを維持するように構成することが問題を解決する 1 つの方法である可能性があります。

注意

ユーザーが XAML ブラウザー アプリケーション (XBAP) との間を移動して戻る場合、存続しているページのエントリは XAML ブラウザー アプリケーション (XBAP) のナビゲーション履歴に保持されません。 ナビゲーション履歴には、保持されていないページのジャーナル エントリのみが保持されます。

依存プロパティ情報

識別子フィールド KeepAliveProperty
に設定されたメタデータ プロパティ true なし

Note

この依存関係プロパティのメタデータ型は ではなく PropertyMetadataです FrameworkPropertyMetadata

適用対象

こちらもご覧ください