Windows Phone 应用程序中的循环导航



我必须开发一个使用循环导航的WP8应用程序。我来自Android,我是WP8的新手,所以如果我说一些愚蠢的话,请原谅我。

当用户启动我的应用程序时,他从页面 A.xaml 开始,然后他可以使用左键导航到 C.xaml 或使用右键导航到 B.xaml。从B.xaml,他可以用左边回到A.xaml,用右边回到C.xaml,而从C.xaml右边回到A.xaml,而左边通向B.xaml。我有 3 个整数:NA、NB 和 NC,它们只能分别在 A、B 或 C 中修改,但显示在所有 3 个整数中,所以我总是传递这些参数。

用户可能会在"页面"之间快速导航,所以我不介意让它们保持活动状态,而不是每次都销毁和重新创建它们。

我的初始代码是这样的(我省略了显示 NA、NB 和 NC 的部分):

A.xaml:

int NA = 0;
int NB = 0;
int NC = 0;
public APage()
{
    InitializeComponent();
    NA= Convert.ToInt32(PhoneApplicationService.Current.State["NA"]);
    NB= Convert.ToInt32(PhoneApplicationService.Current.State["NB"]);
    NC= Convert.ToInt32(PhoneApplicationService.Current.State["NC"]);
    UpdateA(NA);
    UpdateB(NB);
    UpdateC(NC);
}
public void ToC_click(object sender, RoutedEventArgs e)
{
    PhoneApplicationService.Current.State["NA"] = NA;
    PhoneApplicationService.Current.State["NB"] = NB;
    PhoneApplicationService.Current.State["NC"] = NC;
    NavigationService.Navigate(new Uri("/C.xaml", UriKind.Relative));
}
public void ToB_click(object sender, RoutedEventArgs e)
{
    PhoneApplicationService.Current.State["NA"] = NA;
    PhoneApplicationService.Current.State["NB"] = NB;
    PhoneApplicationService.Current.State["NC"] = NC;
    NavigationService.Navigate(new Uri("/B.xaml", UriKind.Relative));
}

B.xaml有ToA_clickToC_click方法,而C.xaml有ToA_clickToB_click,它们只因导航中的uri而异。

这样做,当我导航 A->B->C 或 A->C->B 时我没有问题,但是当尝试 A->B->C->A 或 A->C->

B->A 时,我的应用程序崩溃了。我以为我一直堆叠到 ABCA 之类的东西并收到错误,所以我修改了"后退"按钮以NavigationService.GoBack()我是否从 B 导航到 A 或从 C 导航到 B。通过这种修改,我能够A->B->C而不是向后或A->C->B,但我仍然不能A->B->C->A或A->C->B->A。

我想在这一点上我已经堆叠了所有 3 个 xaml,所以如果我无法返回,我必须清除堆栈然后重建它,但这样做我将不得不自己处理重置(有一些棘手的变量)在 A.xaml 和 C.xaml 中。

这是正确的实施方式吗?我认为拥有某种避免重新创建 xaml 的标志会很方便,而不是"玩"堆栈,但我还没有找到任何关于它的信息。我也觉得我错过了什么,我误解了WP8堆叠吗?

除了使用 PanoramaPivot 控件(如 @Bas 所建议的那样)之外,我会考虑将其视为不是用 Page s 解决的问题,而是通过单个Page根据按下的按钮显示或隐藏不同的UserControl

基本上,在 Project -> 添加新项而不是 Page 中使用 UserControl 模板,然后不使用NavigationService.Navigate在三种状态之间切换,而是在MainPage.xaml中创建三个控件并切换每个控件的Visibility以在正确的时间显示它。

最新更新