情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 のフレーム、ページ、およびナビゲーション機能

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

このトピックでは、Windows Phone ナビゲーション モデルの機能とフレームとページのアーカイブの一部について説明します。これらの機能は、Windows Phone が最初にリリースされて以来、追加され、強化されてきました。

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

ここでは、ナビゲーション API の機能の一部について説明します。

ナビゲーションを取り消すことができるかどうかを決定する

NavigatingCancelEventArgs クラスには、要求されたナビゲーションをキャンセルするために設定できる Cancel プロパティがあります。ただし、特定のシナリオで、ナビゲーションがユーザーではなくシステムによって開始された場合など、ナビゲーションがキャンセルできず、Cancel プロパティを設定しても無効な場合があります。このようなシナリオで、アプリケーションの処理が正しくない場合、ナビゲーションを取り消して現在のページにとどまることができないため、ユーザーは変更内容を失う可能性があります。ナビゲーションを取り消すことができない場合、ユーザーの変更を保存するための代替の方法が必要です。

ナビゲーションが本当に取り消し可能かどうかを判断するために、ブール型のプロパティ IsCancelableNavigatingCancelEventArgs クラスに追加されました。true の場合、ナビゲーションはキャンセルできますが、それ以外の場合、ナビゲーションはキャンセルできません。次のコードに、ナビゲーションがキャンセル可能かどうかをチェックし、ユーザーにナビゲーションをキャンセルするかどうかをたずねる方法を示します。


        protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
        {
            base.OnNavigatingFrom(e);

            // If the navigation can be canceled, ask the user if they want to cancel
            if (e.IsCancelable)
            {
                MessageBoxResult result = MessageBox.Show("Do you want to stay here?", "Confirm Navigation from Page", MessageBoxButton.OKCancel);
                if (result == MessageBoxResult.OK)
                {
                    // User wants to stay here
                    e.Cancel = true;
                    return;
                }
            }

        }

ページ切り替えのナビゲーション方向を指示する

ページ切り替えのアニメーションは進むか戻るかのナビゲーションの方向によって異なります。発生するナビゲーションの種類を示すために、NavigationMode クラスで、読み取り専用の NavigationMode プロパティとプロパティの値を提供するためのコンストラクター オーバーロードを使用できます。コンストラクターが使用されない場合、NavigationMode の既定の値は New です。これは、ユーザーが新しいコンテンツに移動していることを示します。

外部アプリへのナビゲーションを検出する

ナビゲーション イベントで渡された URI が app://external/ であるため、アプリケーションは外部アプリケーションへのナビゲーションを検出できます。ただし、Windows Phone の元のリリースでは、入ってくるナビゲーションが外部ソースからであることを直接検出する方法はありませんでした。この情報は、さまざまな種類のナビゲーションに固有のアニメーションをカスタマイズする場合に役立ちます。

この機能を有効にするために、ブール型プロパティ IsNavigationInitiatorNavigationMode クラスと NavigatingCancelEventArgs クラスで使用できます。このプロパティは、ナビゲーションが外部アプリケーションまたは開始画面との間で行われるすべての場合に、false に設定されます。ナビゲーションがアプリケーション内部の場合は、true に設定されます。このプロパティの値を設定できる新しいコンストラクター オーバーロードも提供されています。設定しない場合、既定の値は true です。これは、ナビゲーションがアプリに対して内部であることを示します。

バック スタックはアプリケーションのナビゲーション履歴です。バック スタック内の各エントリは、ページを表す URI です。バック スタック内にページの複数のエントリがある可能性がありますが、各エントリは、ページの異なるインスタンスを表します。次に、NavigationService API でサポートされるシナリオの一部を示します。

  • 現在のページを新しいページで置き換えるには、新しいページに進み、バック スタックの一番上を削除します。

  • 指定したページ (通常は最初のページ) に対するすべてのページを削除するには、すべての途中のページを削除し、最初のページに戻ります。

  • バック スタック全体をクリアし、指定したページで置き換えるには、新しいページに進み、バック スタックのすべてのエントリを削除します。

バック スタックの操作の詳細については、「Windows Phone 8 のバック スタックを使用したナビゲーション方法」を参照してください。

BackStack プロパティ

BackStack プロパティは、バック スタック内のエントリのリストを返します。

RemoveBackEntry メソッド

RemoveBackEntry メソッドは、バック スタックから最新エントリを削除します。または、それ以上削除するエントリがない場合は、InvalidOperationException をスローします。複数の項目を削除する場合は、このメソッドを複数回呼び出す必要があります。この API は同期するため、UI スレッドから呼び出される必要があります。

JournalEntryRemoved イベント

JournalEntryRemoved イベントは、NavigationService クラスで使用できます。このイベントは、Navigated イベント発生後、RemoveBackEntry 処理中、または通常の戻る移動中に発生します。

JournalEntryRemovedEventArgs クラスには、削除される項目のジャーナル エントリである 1 つの読み取り専用プロパティ Entry があります。

ここでは、PhoneApplicationFrame クラスと PhoneApplicationPage クラスの機能の一部について説明します。

PhoneApplicationFrame

PhoneApplicationFrame には、NavigationService クラスと同じメンバーがいくつかあります。これには、RemoveBackEntry() メソッド、JournalEntryRemoved イベント、および BackStack プロパティが含まれます。これらはすべて、NavigationService のメンバーと同じように機能します。

また、BackKeyPress イベントは、PhoneApplicationFrame クラスで使用できます。アクティブなページがイベントを受け取る前に、フレームでイベントを直接処理できるため、キーの押下は取り消すことができます。

PhoneApplicationPage

OnRemovedFromJournal(JournalEntryRemovedEventArgs) メソッドは、RemoveBackEntry() メソッドによって、ページがジャーナルから削除された後に、ページで呼び出されます。さらに、このメソッドは、通常の戻るナビゲーションで OnNavigatedFrom(NavigationEventArgs) がオーバーライドした後にも呼び出されます。このイベントの目的は、ページにジャーナルから削除されることを通知して、リソースを解放し、ガベージ コレクションの対象となるようにすることです。このイベントを使用すると、すべてのクリーンアップ コードを単一のイベントに配置できます。ただし、データの保存、アニメーションの再生、ページの状態の読み込みと保存には、このイベントを使用しないでください。このようなアクションはナビゲーション イベントに属しています。

JournalEntry クラスを使用できます。また、Sourceプロパティもアクセス可能で、読み取り専用になりました。

システム トレイは、アプリケーション バーに似た不透明度と色をサポートします。PhoneApplicationPage インスタンスに、システム トレイの次のパブリックな読み書き可能添付プロパティを添付できます。

ProgressIndicator

システム トレイの ProgressIndicator は、操作の進行状況を示すために使用されます。

ページのレイアウトに影響を与えずに ProgressIndicator を使用するには、SystemTrayOpacity プロパティの値を 0 (ゼロ) に設定します。

ProgressIndicator には、次のパブリック プロパティがあります。

  • IsVisible– インジケーターがアクティブかどうかを判断します

  • Text – 作業の実行時に表示される短いテキスト文字列

  • Value – 0 から 1 の進行状況値

  • IsIndeterminate – True の場合、いくつかのスクロールするドットとして進行状況インジケーターを描画します

システム トレイを非表示にすると、インジケーターの可視性に関係なく、進行状況インジケーターが非表示になります。

表示: