【问题标题】:Cyclic Navigation in a Windows Phone ApplicationWindows Phone 应用程序中的循环导航
【发布时间】: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_clickToC_click 方法,而C.xaml 有ToA_clickToB_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


【解决方案1】:

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

基本上在Project -> Add New Item中使用UserControl模板代替Page,然后代替使用NavigationService.Navigate去在这三种状态之间,您在MainPage.xaml 中创建三个控件,并切换每个控件的Visibility 以在正确的时间显示它。

【讨论】:

  • 我测试了所有 3 个解决方案,但由于我的页面有很多图像、按钮和不同的布局级别,我使用了全景。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
相关资源
最近更新 更多