【发布时间】:2015-01-29 22:34:16
【问题描述】:
我必须开发一个使用循环导航的 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->B 时我没有问题,但是当尝试 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 堆叠吗?
【问题讨论】:
-
全景视图怎么样?
-
Panorama 的导航风格对于我必须做的事情来说还不错,但不幸的是标题真的很大,我的内容已经几乎没有包含在每个页面中。如果我可以删除标题或大大减少它,这个解决方案会很好。
-
我找到了一种方法来去除头部和侧面,而不是你!
标签: c# xaml windows-phone-8