我有一个应用程序,当应用程序被逻辑删除时,我想在其主屏幕上再次以“新”状态重新启动应用程序。
但默认情况下,wp7框架希望将您导航回到您停止的任何页面。
你如何阻止这种行为?
答案 0 :(得分:2)
呃,这就是我想出来的,就像Shahar说的那样,它是hacky(但确实有效):
在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秒)延迟。
答案 1 :(得分:1)
你无法真正做到这一点,而不是一些非常大的黑客。这是我个人认为这样做的唯一方法 - 可能还有其他方式。
从tombstone返回时,您将获得ApplicationActivated事件。存储一些记住它的变量。此外,重置您的全局状态。
使用NavigationService.RemoveBackEntry
,直至到达第一页。
如果您可以“重置”主页面的状态,请执行此操作。否则,在您的MainPage中,在OnNavigateTo中,如果您设置为记住刚回来的静态变量为true,请使用NavigationService.Navigate()方法再次转到应用程序的第一页。您现在在堆栈中有两个“第一”页面。第一个是“脏”,第二个是“新”。
重置全局变量,告诉您刚刚从停用状态返回,但是有第二个全局变量,告诉您如果按下后退,应用程序会崩溃。
挂钩BackKey事件并终止应用程序(抛出一些例外)。
我强烈建议你重新考虑你的应用程序流程 - 这是一个非常糟糕的魔力。