Windows phone 7 从导航堆栈中删除页面
我有以下应用程序架构:Windows phone 7 从导航堆栈中删除页面,windows-phone-7,Windows Phone 7,我有以下应用程序架构: [List Page] -> [Detail Page] -> [ShareOnFacebook Page] ^__________________| 用户在[列表页] 用户可以单击共享按钮,也可以不单击。如果用户单击了该按钮,则应用程序将导航到一个[ShareOneFacebook页面],该页面将显示Facebook登录表单,发布消息并返回 用户返回 如果用户在facebook上共享,它将“重新发布”消息,因为应用
[List Page] -> [Detail Page] -> [ShareOnFacebook Page]
^__________________|
[列表页]
共享
按钮,也可以不单击。如果用户单击了该按钮,则应用程序将导航到一个[ShareOneFacebook页面]
,该页面将显示Facebook登录表单,发布消息并返回我如何在导航堆栈中“ommit”ShareOnFacebook页面?我的应用程序中也有类似的情况,我用一个非常简单的解决方案来解决它 如果要“跳过”backbackback中的某个页面,请在该页面的NavigatedTo()函数中放置一些逻辑 例如:您可以在发布到facebook时将bool设置为true,然后将以下代码放入ShareOnFacebook页面的NavigatedTo()函数中 以下是伪代码:
if(已发布)
Navigation.GoBack()代码>
GoBack()函数将跳过此页并返回上一页,用户将永远看不到该页。查看新页
从下载,我为同一个问题发布了一个示例
Matt链接到的非线性导航服务本质上做了相同的事情,但可能比我的简单示例更好。试试这个:调用导航服务。RemoveBackEntry()在on导航到
方法中的code>。这将从堆栈中删除上一页。在我看来,Navigation.GoBack()的技巧代码>不令人满意,因为它显示要删除的页面的时间很短
注意:仅适用于Windows Phone OS 7.1(Mango)SDK我在导航服务
类上使用removeBackEntry
方法。我也用它来设置自己的启动屏幕
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();
}
请看一看我为此编写的简单库:
var fluent=新的FluentNavigation(根框架);
流利。WhenNavigatedTo()
.ThenTo()
.然后到任何页面()
.从后台移除入口(1);
流利。WhenNavigatedTo()
.ThenTo()
.ThenTo()
.ThenTo()
.RemoveEntries from BackstackTill();
流利。WhenNavigatedTo()
.ThenTo()
.ThenTo()
.然后选择()
.然后到任何页面()
.RemoveEntries from BackstackTill();
流利。WhenNavigatingTo()
.RedirectTo();
流利。WhenNavigatingTo()
.If(()=>false)
.RetirectWithReturnUri(“ReturnUri”);
它是可行的,但它完全是一种黑客行为。我喜欢机器人模型,它可以先呼叫完成,然后移动,效果很好。谢谢,我更改了批准的答案。我最初的问题是在Mango之前,但我想现在新的人需要这个答案嗨,这个项目还活着吗?Vitalii,目前我没有为WP开发,所以我不会对库做任何更改。但是,请放心,我会接受任何可以帮助您和其他用户的更改。可能会晚一点-现在我正在寻找经验证的解决方案来处理导航。我有主轴心泄漏,当在上面导航时,我有两个视图。不知何故,使用fluent对我的情况没有帮助。
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");