我必须开发一个使用循环导航的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_click
和ToC_click
方法,而C.xaml有ToA_click
和ToB_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堆叠吗?
答案 0 :(得分:1)
除了使用Panorama
或Pivot
控件(如@Bas所建议)之外,我会考虑将此视为Page
s无法解决的问题单Page
根据按下的按钮显示或隐藏不同的UserControl
。
基本上使用项目 - >中的 UserControl 模板添加新项而不是页然后使用NavigationService.Navigate
在三种状态之间切换,在MainPage.xaml
内创建三个控件并切换{每个人{1}}在适当的时间显示它。