Windows phone 7 当应用程序从墓碑中恢复时,如何防止导航?

Windows phone 7 当应用程序从墓碑中恢复时,如何防止导航?,windows-phone-7,Windows Phone 7,我有一个应用程序,当应用程序被删除时,我想在主屏幕上以“新”状态重新启动应用程序 但是默认情况下,wp7框架希望将您导航回您离开的任何页面 如何阻止这种行为?如果没有一些相当大的黑客,你不可能真正做到这一点。这是我个人能想到的唯一方法——可能还有其他方法 从墓碑镇回来时,您将获得一个ApplicationActivated事件。存储一些记住这一点的变量。另外,重置全局状态 使用导航服务。删除返回条目,直到到达第一页 如果可以“重置”主页的状态,请执行此操作。否则,从主页上的OnNavigateT

我有一个应用程序,当应用程序被删除时,我想在主屏幕上以“新”状态重新启动应用程序

但是默认情况下,wp7框架希望将您导航回您离开的任何页面


如何阻止这种行为?

如果没有一些相当大的黑客,你不可能真正做到这一点。这是我个人能想到的唯一方法——可能还有其他方法


  • 从墓碑镇回来时,您将获得一个ApplicationActivated事件。存储一些记住这一点的变量。另外,重置全局状态

  • 使用导航服务。删除返回条目,直到到达第一页

  • 如果可以“重置”主页的状态,请执行此操作。否则,从主页上的OnNavigateTo中,如果设置为记住刚返回的静态变量为true,请使用NavigationService.Navigate()方法再次转到应用程序的第一页。现在,堆栈中有两个“第一”页。第一个是“脏的”,第二个是“新的”

  • 重置全局变量,该变量告诉您刚从停用状态返回,但另一个全局变量告诉您,如果按下back,将使应用程序崩溃

  • 钩住BackKey事件并杀死应用程序(抛出一些异常)


  • 我强烈建议你重新思考你的应用程序流程——这是一个相当糟糕的魔咒。

    呃,这就是我想到的,就像沙哈尔所说的,它是黑客的(但确实有效):

    在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();
        }
    
    public静态异步void to输入页()
    {
    //CurrentFrame.StopLoading();
    wait Observable.FromEventPattern(CurrentFrame,“Navigated”).Take(1.ToTask();
    SafelyNavigateTo(“/ZuneSlotMachine;component/Views/Main/MainPage.xaml”);
    wait Observable.FromEventPattern(CurrentFrame,“Navigated”).Take(1.ToTask();
    while(CurrentFrame.BackStack.Count()>0)
    CurrentFrame.RemoveBackEntry();
    }
    
    基本上,它会等待第一次导航发生,即使调用CurrentFrame.StopLoading()也无法取消第一次导航。在第一次导航之后,它导航到了我的起始页面。导航完成后,它将从backback中删除所有条目


    它可以工作,但从墓碑镇返回时有明显的延迟(1-2秒)。

    我想在主页上重新启动应用程序。不到3页深或任何被关闭的地方当你从墓碑回来时,你可以导航到你的主屏幕并从背面移除第一个屏幕。我认为这是可能的。