轉自:http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/gg278407(v=vs.105).aspx
適用於: Windows Phone 8 | Windows Phone OS 7.1
Windows Phone 應用程序是由存在於導航堆棧上的頁面構成,用戶可以使用硬件“返回”按鍵訪問這些頁面。如果在應用程序中過度使用頁面,則會導致導航堆棧過於繁瑣,從而造成許多問題,包括性能和可靠性降低。開發人員必須遵守在應用程序中有效使用頁面的導航模型,在實施替代方法時限制頁面的使用。本主題提供了爲應用程序創建有效頁面模型的最佳做法和指導。
Windows Phone 應用程序可以被看作是頁面、屏幕的集合或兩種元素的組合。下面是“頁面”和“屏幕”在 Windows Phone 應用程序的頁面模型上下文中的定義:
-
“頁面” - 一個用戶可識別的持久狀態集合。它可視爲包含信息、可記憶內容或指向其他頁面的鏈接的頁面。
-
“屏幕” - 一個不包含內存內容的常用 UI 屏幕(如,彈出窗口、對話框或初始屏幕)。屏幕不是用戶可識別的持久狀態集合。
下圖說明了一個包含各種頁面和屏幕的假設應用結構。
從該圖中,可以看到應用程序由下列頁面組成:
-
主頁
-
小組件頁面
-
小組件詳細信息頁面(包含 Pivot)
-
小工具詳細信息頁面
-
搜索頁面
-
設置頁面
初始屏幕和登錄屏幕不是頁面,因爲頁面的定義要求頁面具有用戶可識別的持久狀態集合。例如,初始屏幕不包含狀態。在啓動應用程序之前,它僅用作佔位符。登錄屏幕還包含無狀態數據,因爲它僅要求輸入憑據。當確定 UI 是否是頁面時,可以詢問下列問題:
-
用戶是否明確要訪問該頁面?
-
用戶是否記得他們曾訪問過該頁面並希望返回到該頁面?
初始屏幕和登錄屏幕不符合上述標準,因此不將其視爲頁面。
您將會注意到“小部件詳細信息”和“小工具詳細信息”上都有環狀箭頭。對於前面的情況,這表明您可以分別從一個“小部件”或“小工具”轉換到另一個“小部件”或“小工具”,而不用轉到新的頁面。此行爲類似於 Microsoft Outlook 應用程序中的行爲,用戶可以在該應用程序中通過單擊箭頭在同一窗口中的上一封郵件和下一封郵件之間進行切換。
導航
可將 Windows Phone 中的導航定義爲頁面間的轉換。如帶箭頭的圖形所示,存在多個轉換步驟,包括從“主頁”到“小部件列表頁面”或從“搜索頁面”到“小工具詳細信息頁面”的轉換。但是,並非所有轉換步驟都會被視爲真正的導航。例如,當您從初始屏幕移動到主頁,或從登錄屏幕到任何其他屏幕進行多個移動時。原因依然是這些屏幕都不是頁面。從非頁面中移動可稱爲轉換。
您必須通過 Windows Phone 中定義的頁面、屏幕和導航概念,儘可能將應用程序構建爲在不使用其他頁面的情況下處理各種方案。本節提供了使用有效頁面模型的最佳做法:
-
屏幕和非導航的轉換 - 對於登錄屏幕等臨時 UI,可以使用 Popup 控件顯示部分覆蓋屏幕的內容,而無需實施要求完整導航的單獨屏幕。您可以在代碼中添加 BackKeyPress 事件,並在彈出窗口顯示時將 e.Cancel 設置爲 true,以使用戶能夠使用“返回”按鍵關閉該對話框。
-
多個內容視圖 - 對於顯示多部分內容的頁面,只需將頁面上的控件重新綁定到新 DataContext 即可以在不同的內容間轉換,而無需使用導航。同時,還可以通過加載頁面中 UserControl 的多個實例,或使用任何其他機制顯示新內容來重新綁定。您可以選擇用戶可用來在項目中向前和向後轉換的方法。例如,可以考慮使用上一個和下一個“應用程序欄”按鍵。但是,我們建議您避免過度使用“返回”按鍵進行本地轉換。
-
保存狀態和邏輯刪除 - 您可以保存給定頁面中發生轉換的本地歷史記錄,從而在邏輯刪除應用程序時,用戶可以重新跟蹤其步驟。對於諸如上一個或下一個瀏覽之類簡單情形,只需將頁面“狀態”保存在當前索引中。通過執行此操作以及使用 NavigationContext API 應提供在從邏輯刪除狀態返回時遍歷數據集所需的所有信息。對於具有較爲複雜的本地轉換歷史記錄的應用程序(如任意形式瀏覽鏈接項),可以選擇將某些歷史記錄存儲在頁面狀態中,但是您需要對存儲的項設置一個合理的限制。對於用戶而言,關鍵是使用硬件“返回”按鍵,將其返回到以前頁面。它們不應該返回到以前查看的項。有關更多信息,請參見 Windows Phone 的啓動、恢復和多任務處理。
-
導航後退堆棧 - 後退堆棧中的頁面保存在內存中。應用程序應該最大限度地降低後退堆棧中頁面上使用的內存,例如釋放大圖片、緩存數據等。有關更多信息,請參見 Windows Phone 中的框架、頁面和導航功能。
-
下表提供了有關可視爲頁面的應用程序通用部分的信息。
屏幕類型
頁面
說明
初始屏幕
否
這是啓動體驗的瞬態部分,用戶無法導航到該處。
全景體驗
是
Windows Phone 應用程序的通用主屏幕方法。
詳細信息頁面
是
此頁面通常適用於通過查詢字符串參數化的以數據中心的應用。
Pivot 項目
否
數據透視項目是數據透視控件的一個小型組件,用於存放所需的內容。
登錄或錯誤對話框
否
這是由應用程序狀態觸發的瞬態 UI,用戶無法直接導航到該處。
項目枚舉
否
用於瀏覽類似內容(作爲就地活動,而非導航方法)。
-
下表概括了您可以用於處理各種類型 UI 實現的方法。
UI 類型
實現
“返回”按鍵行爲
邏輯刪除行爲
頁面
PhoneApplicationPage 控件
“返回”按鍵會自動返回或退出應用。您不應重寫,除非出現數據丟失的情況。
自動保留在後退堆棧中。
屏幕瞬態 UI
彈出窗口或子窗口
應用應重寫以便取消彈出窗口。當按下“返回”按鍵時,屏幕鍵盤和 MessageBox 控件自動取消。
應用應在導航期間關閉或取消彈出窗口。
項目枚舉
UserControl
不可用:在父頁中託管。
應用應保存適當的活動項目。