C# 在应用程序激活的Windows Phone 7中导航(墓碑)

C# 在应用程序激活的Windows Phone 7中导航(墓碑),c#,silverlight,windows-phone-7,C#,Silverlight,Windows Phone 7,每当我的程序通过墓碑关闭,当它被重新激活时,我希望应用程序导航回开始屏幕 我想做这样的事情 private void Application\u已激活(对象发送者,激活事件目标) { NavigationService.Navigate(新Uri(“/Start.xaml”,UriKind.Relative)); } 但它不起作用。谢谢你,舒尔曼。这不是人们普遍接受的墓志铭行为。我们的期望是,应用程序应该返回与用户离开时完全相同的状态。记住,逻辑删除可能是应用程序中用户发起的操作以外的其他操作的

每当我的程序通过墓碑关闭,当它被重新激活时,我希望应用程序导航回开始屏幕

我想做这样的事情

private void Application\u已激活(对象发送者,激活事件目标)
{
NavigationService.Navigate(新Uri(“/Start.xaml”,UriKind.Relative));
}


但它不起作用。谢谢你,舒尔曼。

这不是人们普遍接受的墓志铭行为。我们的期望是,应用程序应该返回与用户离开时完全相同的状态。记住,逻辑删除可能是应用程序中用户发起的操作以外的其他操作的结果。例如,作为一个用户,我不希望一个应用程序忘记我输入的所有信息,仅仅因为我接了一个电话就返回到上一个屏幕

如果您真的想这样做,那么如何做到这一点将取决于应用程序的结构和导航层次结构

您最好的选择可能是构建自己的导航系统。
如果您想使用内置的后堆栈。您的应用程序激活事件可以设置一个全局标志,所有页面将在其OnNavigatedTo事件中拾取该标志,然后通过向后导航来响应。这种向后导航可能对用户可见(如果只是短暂的),并创造出不太理想的体验

更新

现在可以使用.p>I second Matt执行类似操作,这不是MSFT指南建议的行为。WP7用户希望该应用程序能被正确安装

如果您仍然严格要求这样做,那么下面的方法是:在导航时使用NavigationService.GoBack()。
从技术上讲,WP7保留了系统中已经完成的所有页面转换,您可以通过编程返回主页。您可能需要等待NavigationCompleted事件,然后调用下一个GoBack()并调用它,直到NavigationService.CanGoBack为false,这将成为您的主页:)

正如@Matt Lacey所说,这几乎肯定是您不应该做的事情:而且您可能还会与市场发生冲突:

5.2.3停用后的应用程序响应能力

正在安装Windows Phone应用程序 当用户按下 启动按钮或设备超时 使锁屏接合。A. Windows Phone应用程序也是 当它调用启动器时被停用 或选择器API。当激活时,该 应用程序启动时间必须满足以下要求: 第5.2.1节中的要求

Microsoft建议应用程序重新建立 用户需要的应用程序 在申请之前就有经验 已停用。欲了解更多信息, 有关详细信息,请参见执行模型概述 Windows Phone主题


你在申请什么样的申请?如果不了解更多关于开始屏幕的信息或程序的上下文,就很难判断返回开始屏幕是否合适。

我们在转换一个大型遗留项目时遇到了同样的问题,需要对tomstoning进行一些调整。我们对这个平台都比较陌生,所以对这个建议持保留态度。我们的启动页面是SplashPage.xaml。我们使用UriMapper从上一个当前源重定向:

    private void Application_Activated(object sender, ActivatedEventArgs e) {
        IsTombstoned = ! e.IsApplicationInstancePreserved;

        if (IsTombstoned) {
            //the os wants to return to the last page, but we want it to restart to our splash page 
            RootFrame.UriMapper = new RestartUriMapper();
        }
    }
这将重定向到SplashPage.xaml,然后我们进行另一次导航,以清除操作系统想要进入的最后一个页面(可能是我们的导航实现所独有的)


不要听那些引用指南的行善者的话 打哈欠

试试这个

private void Application_Activated(object sender, ActivatedEventArgs e)
{
    RootFrame.Navigated += RootFrame_Navigated;
}

void RootFrame_Navigated(object sender, NavigationEventArgs e)
{
    RootFrame.Navigated -= RootFrame_Navigated;
    RootFrame.Navigate(new Uri("/TestPage.xaml", UriKind.Relative));
}

作为参考,市场上有很多应用程序(特别是游戏)在停用后不会重新建立状态。这是一项建议,而不是规则。但是是的,作为一个用户,当一个应用程序没有保存状态时,这是非常令人沮丧的。
private void Application_Activated(object sender, ActivatedEventArgs e)
{
    RootFrame.Navigated += RootFrame_Navigated;
}

void RootFrame_Navigated(object sender, NavigationEventArgs e)
{
    RootFrame.Navigated -= RootFrame_Navigated;
    RootFrame.Navigate(new Uri("/TestPage.xaml", UriKind.Relative));
}