Windows Phone 中的框架、頁面和導航功能

轉自:http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/hh202868(v=vs.105).aspx

 

適用於: Windows Phone 8 | Windows Phone OS 7.1

本主題介紹了 Windows Phone 導航模型的一些功能以及框架和頁面體系結構。這些功能自最初發布 Windows Phone 之後得到添加或增強。

 

導航 API

以下是導航 API 的一些功能。

確定是否可以取消導航

NavigatingCancelEventArgs 類具有一個 Cancel 屬性,可將其設置爲取消已請求的導航。但是對於某些情況(如由系統而不是用戶啓動導航),則導航不可取消,並且設置 Cancel 屬性無效。如果您的應用不能正確處理此類情況,則用戶會丟失更改,因爲無法取消導航並停留在當前頁面。如果無法取消導航,可以採用另一種方法來保存用戶的更改。

爲了確定導航是否真正可取消,NavigatingCancelEventArgs 類中提供了一個新的 Boolean 屬性 IsCancelabletrue 表示可以取消導航;否則,無法取消導航。下面的代碼說明了如何檢查導航是否可以取消,並詢問用戶他們是否希望刪除導航:

C#
        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 的原始版本中,無法通過任何直接的方法來檢測傳入導航是否來自外部源。對於自定義特定於不同類型導航的動畫,此信息非常有用。

爲了啓用此功能,NavigationModeNavigatingCancelEventArgs 類中提供了 Boolean 屬性 IsNavigationInitiator。對於導航來自外部應用程序或“開始”屏幕或導航到其中的所有情況,此屬性設置爲 false。當導航是在應用程序的內部時,則設置爲 true。還提供了一個新構造函數重載以設置此屬性的值。如果未設置,則默認值爲 true,表示屬於應用內部的導航。

 

使用後退堆棧

後退堆棧是應用程序的導航歷史記錄。後退堆棧中的每個條目都是一個代表頁面的 URI。頁面的後退堆棧中可以有多個條目,但是每個條目都會引用頁面的不同實例。以下是 NavigationService API 支持的一些情況。

  • 若要將當前頁替換爲新頁,請向前導航至新頁,然後移除後退堆棧的頂部。

  • 若要移除指定頁(一般是第一頁)之前的所有頁,請移除所有介入頁並導航回到第一頁。

  • 若要清除整個後退堆棧並將其替換爲指定的頁,請向前導航至新頁,然後移除後退堆棧中的所有條目。

有關使用後退堆棧的更多信息,請參見如何使用 Windows Phone 的後退堆棧導航

BackStack 屬性

BackStack 屬性返回後退堆棧中的條目列表。

RemoveBackEntry 方法

RemoveBackEntry 方法可從後退堆棧中移除最近的條目,如果沒有其他要移除的條目,則引發 InvalidOperationException。如果您想移除多個項目,則必須多次調用此方法。此 API 是同步的,因此必須從 UI 線程調用。

JournalEntryRemoved 事件

NavigationService 類中提供了 JournalEntryRemoved 事件。在 RemoveBackEntry 操作期間或引發 Navigated 事件後正常的後退導航期間引發此事件。

JournalEntryRemovedEventArgs 類具有一個只讀屬性 Entry,即正要移除的項目的日記條目。

 

框架和頁面功能

以下是 PhoneApplicationFramePhoneApplicationPage 類的一些功能。

PhoneApplicationFrame

PhoneApplicationFrame 類具有與 NavigationService 類相同的成員。這包括 RemoveBackEntry() 方法、JournalEntryRemoved 事件和 BackStack 屬性。它們的運行方式都與 NavigationService 中的成員相同。

同樣,PhoneApplicationFrame 類中也提供了 BackKeyPress 事件。在活動頁面接收事件並取消按鍵之前,框架可以直接處理該事件。

PhoneApplicationPage

通過 RemoveBackEntry() 方法從日記中移除某個頁面之後,在該頁面上調用 OnRemovedFromJournal(JournalEntryRemovedEventArgs) 方法。OnNavigatedFrom(NavigationEventArgs) 在正常後退導航中重寫之後也調用此方法。此事件的目的是通知頁面它將從日誌中刪除,以便能夠釋放資源,並確保有資格進行垃圾回收。此事件允許您將所有清除代碼放置在一個事件中。但是請勿使用此事件來保存數據、播放動畫或加載和保存頁面狀態;這些操作包含在導航事件中。

提供了一個 JournalEntry 類。其 Source 屬性也可訪問,並且是隻讀的。

 

系統托盤功能

系統托盤支持類似於應用程序欄的不透明度和顏色。系統托盤的下列公共讀/寫附加屬性可以附加到 PhoneApplicationPage 實例:

ProgressIndicator

系統托盤中的 ProgressIndicator 用於指示操作的進度。

若要使用 ProgressIndicator 且不影響頁面的佈局,請將 SystemTrayOpacity 屬性值設置爲 0(零)。

ProgressIndicator 具有以下公共屬性:

  • IsVisible - 可以確定指示器是否處於活動狀態

  • Text - 要在執行任務時顯示的短文本字符串

  • Value –- 從 0 到 1 的進度值

  • IsIndeterminate – 如果爲 true,則會將進度指示器呈現爲數個滾動點

無論進度指示器本身是否可見,在隱藏系統托盤時,指示器都會隱藏起來。

 

發佈了19 篇原創文章 · 獲贊 0 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章