确定从哪个页面访问Windows Phone 8.1中的此页面

时间:2014-11-07 04:58:46

标签: c# windows-phone-8.1

如何知道我在Windows Phone 8.1中出现的页面?例如,我有3个页面:登录页面,主页面和类别页面。我想要做的是确定用户从哪个页面进入主页面;从登录页面或类别页面。

我在OnNavigatedTo

中的MainPage.cs方法中尝试了此代码
var lastPage = this.Frame.BackStack.Last();           

if (lastPage != null && lastPage.SourcePageType.Name.ToString() == "LogInPage")
{               
}
else
{
}

但事情是,在我进入类别页面并返回主页面之后,它仍然将登录页面作为最后一个堆栈。怎么解决?

2 个答案:

答案 0 :(得分:1)

您是否尝试删除BackStack

How to navigate using the back stack for Windows Phone 8

或者尝试cache页面。

How to cache a page in Windows Phone 8.1

答案 1 :(得分:1)

  

但事情是,在我进入类别页面并返回主页面之后,它仍然将登录页面作为最后一个堆栈。如何解决?

那是对的。当您通过硬件后退按钮从类别页面导航回主页面时,后堆栈上的最后一个条目将从后堆栈弹出并推到前向堆栈的末尾

因此,您可以通过两种不同的方式导航到页面 MainPage

  1. 如果 MainPage 位于Frame.Navigate(typeof(MainPage))的最后,您可以通过Frame.GoForward()Frame.ForwardStack导航前进。您上一页是Frame.BackStack.Last()
  2. 如果 MainPage Frame.GoBack()中的最后一个,您可以通过Frame.BackStack导航向后。您上一页是Frame.ForwardStack.Last()
  3. 那么,你怎么知道是否要查看后栈或前栈?在Page.OnNavigatedTo()方法覆盖中,检查e.NavigationMode的值。如果其值为NavigationMode.NewNavigationMode.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);
    }