【问题标题】:MtFrame GoBackToAsync pop or navigate back to Nth page without loading N-1 pagesMtFrame GoBackToAsync 弹出或导航回第 N 页而不加载 N-1 页
【发布时间】:2015-05-21 14:06:12
【问题描述】:

我正在使用 MyToolkit MtFrame 类在我的 WinRT 应用程序中进行分页。我想知道是否有一种方法可以在不加载中间页面的情况下导航回堆栈上的第 N 页。

让我们说,这是我的页面堆栈的样子:

Page 1 -> Page 2 -> Page 3 -> Page 4 -> Page 5 -> Page 6

现在,如果我从“第 6 页”调用MtFrame.GoBackToAsync(Page 2),它会弹出第 3-5 页并调用其OnNavigatedTo 事件。

有什么方法可以跳过第 3-5 页的加载,或者让它不为这些页面调用 OnNavigatedTo 事件?

【问题讨论】:

  • 您是否尝试过 RemovePageFromStackAt 方法在导航前删除不需要的页面?

标签: windows-phone-8 windows-runtime windows-phone winrt-xaml mytoolkit


【解决方案1】:

这是GoBackToAsync 当前实现的方式。但是您可以先使用RemovePageFromStackAt 删除页面,然后只调用GoBackAsync

假设您在第 6 页并想转到第 2 页,请使用以下代码:

frame.RemovePageFromStackAt(Page5);
frame.RemovePageFromStackAt(Page4);
frame.RemovePageFromStackAt(Page3);
await frame.GoBackAsync(); 

因为您事先删除了第 3-5 页,所以GoBackAsync 从第 6 页跳转到第 2 页...

但请记住:这样页面将被永久删除,并且向前导航被破坏,因此应该被禁用......

唯一干净的解决方案是实现GoBackToAsync,这样它不仅会多次调用GoBackAsync...请为此在codeplex项目上创建一个问题。

来自@Vasanth 的通用代码:

while (currentView.Frame.PreviousPage != desiredPage) 
{ 
    currentView.Frame.RemovePageFromStackAt(currentView.Frame.CurrentIndex - 1); 
}

更新:在 MyToolkit v2.3.29 中您可以使用GoBackToAsync,问题现已修复...

【讨论】:

  • 感谢@Rico,它成功了!如果有人需要动态逻辑,下面是我所做的:while (currentView.Frame.PreviousPage != desiredPage) { currentView.Frame.RemovePageFromStackAt (currentView.Frame.CurrentIndex - 1); }
  • 谢谢,但你知道,这不是一个好的解决方案,因为它会完全删除页面,而不仅仅是向后导航……向前导航会被破坏。
  • 一有时间,我就会重新实现GoBackToAsync 方法以使其正常工作。
猜你喜欢
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多