我有这个应用程序架构:
[List Page] -> [Detail Page] -> [ShareOnFacebook Page]
^__________________|
Item
[List Page]
Share
按钮,如果他或她,应用程序导航到显示Facebook登录表单的[ShareOneFacebook page]
,发布消息并导航回来如果用户在Facebook上共享,它将“重新发布”该消息,因为应用程序存储会话,因此它将导航回ShareOnFacebook,然后返回到我的详细信息页面。
如果用户没有分享,他会回到列表页面。
如何在我的导航堆栈中“省略”ShareOnFacebook页面?
答案 0 :(得分:27)
试试这个:在NavigationService.RemoveBackEntry();
方法中调用OnNavigatedTo
。这将从堆栈中删除上一页。在我看来,Navigation.GoBack();
的技巧并不令人满意,因为它显示了要在短时间内删除的页面。
注意:仅适用于Windows Phone OS 7.1(Mango)SDK
答案 1 :(得分:3)
我的应用程序中有类似的情况,我用一个非常简单的解决方案来解决它。
如果要“跳过”后台堆栈中的页面,请在该页面的NavigatedTo()函数中放置一些逻辑。
例如:当您发布到Facebook时,您可以将bool设置为true,然后将以下代码放在ShareOnFacebook页面的NavigatedTo()函数中。
这是伪代码:
if (alreadyPosted)
Navigation.GoBack();
GoBack()函数将跳过此页面并返回上一页,用户将永远不会看到该页面。
答案 2 :(得分:3)
看看我为此目的编写的简单库: http://navcoerce.codeplex.com/
var fluent = new FluentNavigation(RootFrame);
fluent.WhenNavigatedTo<MainPage>()
.ThenTo<LoginPage>()
.ThenToAnyPage()
.RemoveEntriesFromBackStack(1);
fluent.WhenNavigatedTo<MainPage>()
.ThenTo<LoginPage>()
.ThenTo<RegisterPage>()
.ThenTo<PaymentPage>()
.RemoveEntriesFromBackStackTill<MainPage>();
fluent.WhenNavigatedTo<MainPage>()
.ThenTo<SecondPage>()
.ThenTo<RegisterPage>()
.ThenOptionallyTo<ForgotPasswordPage>()
.ThenToAnyPage()
.RemoveEntriesFromBackStackTill<MainPage>();
fluent.WhenNavigatingTo<PaymentPage>()
.RedirectTo<LoginPage>();
fluent.WhenNavigatingTo<PaymentPage>()
.If(() => false)
.RedirectWithReturnUri<LoginPage>("ReturnUri");
答案 3 :(得分:1)
查看新的Nonlinear Navigation Service recipe
从http://create.msdn.com/en-us/education/catalog/article/nln-serv-wp7
下载答案 4 :(得分:1)
我在removeBackEntry
类上使用NavigationService
方法。我也用这个来设置我自己的启动画面
private void BWorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// switch screen
NavigationService.Navigated += new NavigatedEventHandler(NavigationServiceNavigated);
NavigationService.Navigate(new Uri("/Pages/main.xaml", UriKind.Relative));
}
void NavigationServiceNavigated(object sender, NavigationEventArgs e)
{
NavigationService.RemoveBackEntry();
}
答案 5 :(得分:0)
我发布了同一个问题here.
的示例非线性导航服务Matt链接到基本上做同样的事情,但可能比我的简单例子更好。