每当我的程序通过墓碑关闭时,当它被重新激活时,我希望应用程序导航回到开始屏幕。
我想做这样的事情
private void Application_Activated(object sender, ActivatedEventArgs e)
{
NavigationService.Navigate(new Uri("/Start.xaml", UriKind.Relative));
}
但它不起作用。谢谢,舒尔曼。
答案 0 :(得分:5)
这不是墓碑下普遍接受的行为。期望应用程序应该完全按照用户离开时的方式返回。请记住,墓碑可能是应用程序中用户启动的操作之外的其他内容的结果。例如,作为用户,我不希望应用程序忘记我输入的所有信息并返回上一个屏幕,因为我接听了电话。
如果你真的想这样做,它的完成方式取决于应用程序的结构和导航层次结构。
您最好的选择可能是建立自己的导航系统 如果你想使用内置的后台堆栈。您的Application_Activated事件可以设置一个全局标记,所有页面将在其OnNavigatedTo事件中获取,然后通过向后导航进行响应。这种向后导航可能对用户可见(如果只是短暂的),并且创建的体验不太理想。
<强>更新强>
现在可以使用Non-Linear Navigation Service进行类似的操作。
答案 1 :(得分:2)
我是第二个Matt,这不是MSFT指南推荐的行为。 WP7用户希望该应用程序能够正确地进行坟墓投掷。
如果您仍然严格执行此操作,请执行以下操作:在导航时多次使用NavigationService.GoBack()。 从技术上讲,WP7保留了您在系统中已经完成的所有页面转换,您可以编程返回主页。您可能需要等待NavigationCompleted事件然后调用下一个GoBack()并调用它,直到NavigationService.CanGoBack为false,这将是您的主页:)
答案 2 :(得分:2)
不要听所有这些引用指南的gooders 哈欠
试试这个
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));
}
答案 3 :(得分:0)
正如@Matt Lacey所说,这几乎肯定是你不应该做的事情:你可能会对市场犯规certification guidelines:
5.2.3停用后的应用响应
Windows Phone应用程序是 当用户按下时停用 开始按钮或设备超时 导致锁定屏幕啮合。一个 Windows Phone应用程序也是 调用启动器时停用 或Chooser API。激活时, 申请发布时间必须符合 第5.2.1节中的要求。
Microsoft建议应用程序重新建立状态 用户的应用程序 在申请之前经历过 停用即可。欲获得更多信息, 请参阅执行模型概述 Windows Phone主题。
你在做什么样的申请?在不知道更多关于它或程序的上下文的情况下,很难调用返回到开始屏幕是否合适。
答案 4 :(得分:0)
我们遇到了转换大型遗留项目的同样问题,需要对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,然后我们会进行另一次导航以清除操作系统想要访问的最后一页(可能是导航实现所独有的。)
protected override void OnNavigatedTo(NavigationEventArgs e) {
base.OnNavigatedTo(e);
if (NavigationContext.QueryString.ContainsKey("restart")) {
var app = Application.Current as App;
//a page redirect mapper was installed to get here from tombstone - reinstate the AssociationUriMapper now
app.RootFrame.UriMapper = App.Root.AssociationUriMapper;
//from tombstone, the last current nav source is still state, so force an initial navigation back to
//a new instance of this splash page and proceed start up from there
App.PageNavigation.Navigate(@"/Pages/SplashPage.xaml?fromtomb=true");
}
}
class RestartUriMapper : UriMapperBase {
Uri restartUri;
public RestartUriMapper() {
restartUri = new Uri(string.Format("/Pages/SplashPage.xaml?restart={0}", true.ToString()), UriKind.Relative);
}
public override Uri MapUri(Uri uri) {
if (restartUri != null) {
Uri nextPageUri = restartUri;
restartUri = null;
return nextPageUri;
}
return uri;
}
}