在当前发布的WP7版本中,您无法对页面堆栈进行编程控制。
我从A开始,然后转到B,然后是C. B是新项目的数据输入页面,所以从CI返回想要逻辑上登陆A.目前我在B上听取来自C和C的导航强制另一个回到A.然而,事件不会很快发生,以阻止页面显示在屏幕上。
A - > B - > ç
C - >甲
A是顶级列表页面。 B是新项目页面。 C是项目详细信息页面。
到目前为止,这只发生在一个表单上,因此我的解决方法是覆盖我想跳过的页面中的OnNavigatedTo
,并以编程方式调用“返回”。但是,这会产生不希望的效果,即短暂显示页面,然后立即导航。
我知道Mango中有一个新功能可以通过编程方式从页面堆栈中弹出一个页面,但我很想知道发布版本中是否有解决问题的方法。
另一个动机是我不知道什么版本最适合目标,最新版本,或者适合应用程序的版本。暂时我坚持使用现场版。
答案 0 :(得分:3)
您应该阅读this blog post解决循环导航问题,然后下载展示非线性导航的this recipe code。
答案 1 :(得分:3)
我已经通过在跳过期间使根框架透明来停止闪烁。这个例子不是我的代码所直接的。
首先在您要跳过的页面上,覆盖OnNavigatedTo
并测试以查看您来自哪里(这是我的代码具体的位置,我跟踪我的位置):
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// If I've come from page C, go back again.
NavigationService.GoBack();
}
其次,在主 App.xaml.cs 中注册Navigating
的事件处理程序(我把它放在public App()
构造函数中):
RootFrame.Navigating += RootFrame_Navigating;
最后,将它们充实以隐藏框架并在跳过期间再次显示它:
private bool _skipped;
private void RootFrame_Navigated(object sender, NavigationEventArgs e)
{
RootFrame.Opacity = 100;
RootFrame.Navigated -= RootFrame_Navigated;
}
private void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e)
{
if (_skipped)
{
_skipped = false;
RootFrame.Navigated += RootFrame_Navigated;
}
if (e.NavigationMode == NavigationMode.Back &&
e.Uri.OriginalString.Contains("ThePage.xaml"))
{
RootFrame.Opacity = 0;
_skipped = true;
}
}
确定何时使页面透明的代码在我的实际代码中也有所不同,但我在答案中添加了一个实现以供说明。这几乎与另一个答案中链接的配方中的代码相同,但不需要使用第三方DLL。
我提供了自己的答案,因为我之前看过其他答案中提供的来源,但从未注意过隐藏根框架的代码。我没有使用非线性导航服务,只是框架透明度的代码片段(我不需要它来检测圆形导航,因为我很清楚我在应用程序中做出的设计选择并且可以自己发现它们: - )
这足以作为(当前)一个案例中的一种解决方法,我需要跳过一个在返回时没有意义的页面。我想当Mango问世的时候我最适合定位最新版本,所以这段代码很快就会废弃。
<强>来源:强>
答案 2 :(得分:1)
除了你已经知道的闪烁方式之外,没有办法在芒果之前做到这一点。
在芒果,您可以使用NavigationService.RemoveBackEntry。
这更像是一个糟糕的应用程序设计问题,而不是其他任何问题。您不应该要求立即页面。
您的解决方法应该是设计一个不需要任何即时页面的应用程序结构。