我試圖用C#創建一個UWP(通用Windows應用程序)應用程序。我的問題是Frame
控件:如果我在沒有使用NavigationCacheMode = Required
的情況下使用它,每次用戶返回時,頁面都不會保存在內存中,並且會被重新創建。如果我將NavigationCacheMode
設置爲Required
或Enabled
,則返回正常工作(無新頁面對象)但是如果我導航到來自同一類型的另一頁面,則上一頁面對象將被回收並重新使用(無新頁面實例)。WinRT/UWP框架和頁面緩存:如何在Navigate()上創建新頁面實例並將頁面實例保留在GoBack上()
期望的行爲:
有沒有辦法有一個與原來Frame
控制以下行爲(如在Windows手機):
- 上
Navigate()
- 不斷創建新的頁面實例頁面實例上
GoBack()
我所知道的唯一的解決方案是創建一個自己的Frame
控制,但是這會導致其他問題(如:缺少SetNavigationState()
方法,等...)
示例場景:
用三頁的簡單應用實例:TvShowListPage
,TvShowDetailsPage
,SeasonDetailsPage
。
TvShowListPage
是入口頁面。點擊TvShow
後導航至TvShowDetailsPage
。- 現在
TvShowDetailsPage
在列表中選擇一個季節並導航到TvShowDetailsPage
。 - 如果返回,頁面應該留在內存中以避免重新加載頁面。
- 但是,如果用戶可以追溯到
TvShowListPage
並選擇另一TvShow
的TvShowDetailsPage
得到回收,並可能在錯誤的狀態(例如顯示投支點,而不是第一個,季節樞)
我期待對於默認的Windows Phone 7行爲:導航在頁面堆棧上創建一個新頁面,然後從堆棧中刪除頂層頁面,並顯示堆棧中的前一頁(存儲在內存中)。
解決方案:
因爲沒有解決這個問題,我不得不重新實現所有分頁相關類:頁,框架,SuspensionManager等..
的庫MyToolkit它提供了所有這些類可以在這裏下載:https://github.com/MyToolkit/MyToolkit/wiki/Paging-Overview
參考文獻:
- http://www.jayway.com/2012/05/25/clearing-the-windows-8-page-cache/:沒有很好的解決方案
- http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/88e6d1b3-1fa6-4ab4-a816-e77c86ef236f/:實現一個獨立的圖像類沒有解決方案,因爲它不適用於
SuspensionManager
這可能是Windows 8上最惱人的事情之一。感謝您的解決方案! – 2013-08-29 17:30:30