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

时间:2015-01-29 01:27:48

标签: c# xaml windows-phone-8

我必须开发一个使用循环导航的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-> BI没有问题,但是当尝试A-> B-> C-> A或A时 - > C-> B->我的应用程序崩溃了。 我以为我一直在堆积像ABCA这样的东西并且收到错误,所以我修改了"返回"如果我从B导航到A或从C导航到B,则按钮到NavigationService.GoBack()。通过该修改,我能够A-> B-> C而不是向后或A-> C-> B,但是仍然我不能A-> B-> C-> A或A-> C-> B-> A。

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

这是实施它的正确方法吗?我认为有一种避免重新创建xaml的标志会很方便,而不是"播放"堆栈,但我还没有发现任何相关信息。我也觉得我错过了一些东西,我误解了WP8堆叠吗?

1 个答案:

答案 0 :(得分:1)

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

基本上使用项目 - >中的 UserControl 模板添加新项而不是然后使用NavigationService.Navigate在三种状态之间切换,在MainPage.xaml内创建三个控件并切换{每个人{1}}在适当的时间显示它。