如何知道我在Windows Phone 8.1中出现的页面?例如,我有3个页面:登录页面,主页面和类别页面。我想要做的是确定用户从哪个页面进入主页面;从登录页面或类别页面。
我在OnNavigatedTo
,
MainPage.cs
方法中尝试了此代码
var lastPage = this.Frame.BackStack.Last();
if (lastPage != null && lastPage.SourcePageType.Name.ToString() == "LogInPage")
{
}
else
{
}
但事情是,在我进入类别页面并返回主页面之后,它仍然将登录页面作为最后一个堆栈。怎么解决?
答案 0 :(得分:1)
答案 1 :(得分:1)
但事情是,在我进入类别页面并返回主页面之后,它仍然将登录页面作为最后一个堆栈。如何解决?
那是对的。当您通过硬件后退按钮从类别页面导航回主页面时,后堆栈上的最后一个条目将从后堆栈弹出并推到前向堆栈的末尾。
因此,您可以通过两种不同的方式导航到页面 MainPage :
Frame.Navigate(typeof(MainPage))
的最后,您可以通过Frame.GoForward()
或Frame.ForwardStack
导航前进。您上一页是Frame.BackStack.Last()
。Frame.GoBack()
中的最后一个,您可以通过Frame.BackStack
导航向后。您上一页是Frame.ForwardStack.Last()
。那么,你怎么知道是否要查看后栈或前栈?在Page.OnNavigatedTo()
方法覆盖中,检查e.NavigationMode
的值。如果其值为NavigationMode.New
或NavigationMode.Forward
,请检查后台堆栈。如果其值为NavigationMode.Back
,请检查前向堆栈。
这里有一些代码:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Type lastPage = null;
switch (e.NavigationMode)
{
case NavigationMode.New:
case NavigationMode.Forward:
if (Frame.BackStack.Count > 0)
lastPage = Frame.BackStack.Last().SourcePageType;
break;
case NavigationMode.Back:
if (Frame.ForwardStack.Count > 0)
lastPage = Frame.ForwardStack.Last().SourcePageType;
break;
default:
// TODO
break;
}
if (lastPage != null)
System.Diagnostics.Debug.WriteLine("Last page was {0}", lastPage);
}