我有一個應用程序,當該應用程序是墓碑時,我想重新啓動應用程序在它的主屏幕上的「新」狀態。如何防止應用程序從墓碑中恢復導航?
但是默認情況下,wp7框架希望將您導航回您停留的任何頁面。
你如何阻止這種行爲?
我有一個應用程序,當該應用程序是墓碑時,我想重新啓動應用程序在它的主屏幕上的「新」狀態。如何防止應用程序從墓碑中恢復導航?
但是默認情況下,wp7框架希望將您導航回您停留的任何頁面。
你如何阻止這種行爲?
嗯,這是我想出了,像沙哈爾說,這是哈克(但不工作):
在App.xaml.cs
bool hasLaunched;
private void Application_Launching(object sender, LaunchingEventArgs e)
{
hasLaunched = true;
}
private void Application_Activated(object sender, ActivatedEventArgs e)
{
if (!hasLaunched) // recovering from a tombstone
GlobalNavigationService.ToMainPage();
hasLaunched = true;
}
在GlobalNavigationService類:
public static async void ToMainPage()
{
//CurrentFrame.StopLoading();
await Observable.FromEventPattern<NavigationEventArgs>(CurrentFrame, "Navigated").Take(1).ToTask();
SafelyNavigateTo("/ZuneSlotMachine;component/Views/Main/MainPage.xaml");
await Observable.FromEventPattern<NavigationEventArgs>(CurrentFrame, "Navigated").Take(1).ToTask();
while (CurrentFrame.BackStack.Count() > 0)
CurrentFrame.RemoveBackEntry();
}
基本上,等待第一個導航的情況發生,這似乎並不甚至通過調用CurrentFrame.StopLoading要撤銷的()。第一次導航後,它導航到我的起始頁面。該導航完成後,它會從後臺堆棧中刪除所有條目。
它的工作原理,但是有一個明顯的 - 從墓碑返回時(1 2秒)的延遲。
你不能真正做到這一點沒有一些非常大的黑客。這是我個人認爲這樣做的唯一方法 - 可能還有其他方法。
當從墓碑回來時,您將得到一個ApplicationActivated事件。存儲一些可以記住的變量。此外,重置您的全球狀態。
使用NavigationService.RemoveBackEntry
直到您到達您的第一頁。
如果您可以「重置」主頁面的狀態,那就這樣做。否則,從您的MainPage中,在OnNavigateTo中,如果您設置爲記住剛剛返回的靜態變量爲true,則使用NavigationService.Navigate()方法再次轉到應用程序的第一頁。你現在在你的堆棧中有兩個「第一」頁面。第一個將是「骯髒」,第二個將是「新」。
重置全局變量,告訴你,你剛剛從失活回來,但有第二個全局變量,它告訴你,如果被壓回崩潰的應用程序。
掛鉤BackKey事件並殺死應用程序(拋出一些異常)。
我高度推薦您重新考慮您的應用程序流 - 這是一些非常糟糕的魔咒。
我要重新啓動的主頁上的應用。不是3頁深或者是離開 – Arash 2012-03-26 23:58:27
無論在從墓碑回來,你可以瀏覽到您的主屏幕,並從返回堆棧中取出的第一個屏幕。我認爲這是可能的。 – 2012-03-27 02:25:37