次の方法で共有


CustomContentState クラス

定義

CustomContentState は、後続の各ナビゲーションでソース コンテンツを再度読み込まなくても、単一のソース コンテンツの異なる状態間を移動できるようにします。

public ref class CustomContentState abstract
[System.Serializable]
public abstract class CustomContentState
public abstract class CustomContentState
[<System.Serializable>]
type CustomContentState = class
type CustomContentState = class
Public MustInherit Class CustomContentState
継承
CustomContentState
属性

をオーバーライドする実装の例を CustomContentState 次に示します JournalEntryName

using System;
using System.Windows.Controls;
using System.Windows.Navigation;
[Serializable]
public class MyCustomContentState : CustomContentState
{
    string dateCreated;
    TextBlock dateTextBlock;

    public MyCustomContentState(string dateCreated, TextBlock dateTextBlock)
    {
        this.dateCreated = dateCreated;
        this.dateTextBlock = dateTextBlock;
    }

    public override string JournalEntryName
    {
        get
        {
            return "Journal Entry " + this.dateCreated;
        }
    }

    public override void Replay(NavigationService navigationService, NavigationMode mode)
    {
        this.dateTextBlock.Text = this.dateCreated;
    }
}

Imports System.Windows.Controls
Imports System.Windows.Navigation
<Serializable>
Public Class MyCustomContentState
    Inherits CustomContentState
    Private dateCreated As String
    Private dateTextBlock As TextBlock

    Public Sub New(ByVal dateCreated As String, ByVal dateTextBlock As TextBlock)
        Me.dateCreated = dateCreated
        Me.dateTextBlock = dateTextBlock
    End Sub

    Public Overrides ReadOnly Property JournalEntryName() As String
        Get
            Return "Journal Entry " & Me.dateCreated
        End Get
    End Property

    Public Overrides Sub Replay(ByVal navigationService As NavigationService, ByVal mode As NavigationMode)
        Me.dateTextBlock.Text = Me.dateCreated
    End Sub
End Class

注釈

既定では、 NavigationService はコンテンツ オブジェクトのインスタンスをナビゲーション履歴に格納しません。 代わりに、 NavigationService ナビゲーション履歴を使用して、 に移動するたびにコンテンツ オブジェクトの新しいインスタンスを作成します。 この動作は、大量のコンテンツと大量のコンテンツが移動されている場合に、過剰なメモリ消費を回避するように設計されています。 そのため、コンテンツの状態は、あるナビゲーションから次のナビゲーションに記憶されません。 ただし、WPF では、カスタム状態の一部をコンテンツのナビゲーション履歴エントリに関連付けることができます。

ナビゲーション履歴エントリに関連付けられているカスタム状態は、 から CustomContentState派生するクラスである必要があります。 次のいずれかの手法を CustomContentState 使用して、オブジェクトをナビゲーション履歴エントリに関連付けます。

注意

AddBackEntry メソッドを呼び出す場合は、ナビゲーション イベントを処理するか、 を実装IProvideCustomContentStateする必要があります。

ナビゲーション履歴エントリに移動すると、WPF はカスタム CustomContentState オブジェクトが関連付けられているかどうかを確認します。 その場合は、 を呼び出 Replay して、カスタム CustomContentState オブジェクトが前のナビゲーションから記憶した状態を適用できるようにします。

カスタム CustomContentState クラスをオーバーライド JournalEntryName して、オブジェクトが関連付けられているナビゲーション履歴エントリに表示される名前を CustomContentState 変更できます。 を返す JournalEntryName 値は、さまざまなナビゲーター (ブラウザー、、 NavigationWindowまたは Frame) のナビゲーション UI から表示されます。

から CustomContentState 派生するクラスはシリアル化可能である必要があります。つまり、少なくとも を使用して SerializableAttribute拡張し、必要に応じて を実装 ISerializableする必要があります。

重要

カスタム コンテンツ状態で情報を格納する場合、コンテンツをメモリに保持しない場合は、状態を記憶しているページのインスタンスへの参照を格納できません。 これにより、WPF でページ インスタンスが解放されるのを防ぎ、既定のナビゲーション履歴の動作の目的を無効にします。 これを行う必要がある場合は、代わりに を使用 KeepAlive することを検討してください。

コンストラクター

CustomContentState()

CustomContentState クラスの新しいインスタンスを初期化します。

プロパティ

JournalEntryName

ナビゲーション履歴に格納されているコンテンツの名前を取得します。 のJournalEntryName値は、ブラウザー ナビゲーション UI からFrameNavigationWindow表示されます。

メソッド

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
Replay(NavigationService, NavigationMode)

ナビゲーションが発生したときに、コンテンツに状態を再適用するために呼び出されます。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象

こちらもご覧ください