如何防止应用程序从墓碑中恢复导航?
我有一个应用程序,当该应用程序是墓碑时,我想重新启动应用程序在它的主屏幕上的“新”状态。如何防止应用程序从墓碑中恢复导航?
但是默认情况下,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