OnNavigatedTo()事件是否知道谁导航到它?

时间:2012-12-14 19:09:28

标签: c# windows-8 navigation windows-store-apps eventargs

如果必须,我会在导航到页面时将arg传递给页面,但这是否必要 - 是否有办法知道哪个页面名为Navigate()而不执行此操作?

3 个答案:

答案 0 :(得分:2)

在名为PreviousPage的Application对象中保留一个静态属性。在每个页面(或基类)的OnNavigatedFrom事件中,将PreviousPage设置为“this”(当前页面)。在OnNavigatedTo事件中,您可以检查Application.PreviousPage属性并按照您认为合适的方式使用它。这是访问上一页的最有效方法,因为Windows应用商店应用程序框架中没有Frame.BackStack属性。

答案 1 :(得分:1)

您可以使用GetNavigationState但它有一些不良的副作用(它导航离开当前页面,字符串是内部的,不保证它可能/可能不会改变)。我认为你最好通过它。

  

调用此方法将调用Page.OnNavigatedFrom作为当前   使用NavigationMode.Forward的页面。 GetNavigationState通常是   在应用程序被挂起时调用,所以当前页面是   离开了。

     

注意:

     

这些使用的序列化格式   方法仅供内部使用。您的应用不应该形成任何   依赖于它。此外,此格式支持序列化   仅适用于字符串,字符,数字和GUID类型等基本类型。

答案 2 :(得分:0)

我遇到了这个问题,Caleb的回答非常有帮助。我只想发布一些代码来阐明我如何使用他的解决方案。

免责声明我对C#有点(非常!)新手,我确信有更好的方法可以做到这一点,但我想提供它作为起点,以防其他人正在寻找更多细节。

我在应用程序的命名空间中创建了一个全局变量来保存上一页的状态:

public static class global_vals{
    static object _previousPage;
    public static object previousPage
    {
        get
        {
            return _previousPage;
        }
        set
        {
            _previousPage = value;
        }
    }
}

我的每个页面上的OnNavigatedFrom方法如下所示:

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    base.OnNavigatedFrom(e);
    global_vals.previousPage = this;
}

OnNavigatedTo方法检查全局变量:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    if (global_vals.previousPage.GetType().ToString() == "AppName.SomePage")
    {
        //do something
    }
}