0

如果必须,我会在导航到页面时将 arg 传递给页面,但是否有必要 - 有没有办法知道哪个页面称为 Navigate() 而无需这样做?

4

3 回答 3

2

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

于 2012-12-14T19:51:01.467 回答
1

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

调用此方法将使用 NavigationMode.Forward 为当前页面调用 Page.OnNavigatedFrom。GetNavigationState 通常在应用程序被挂起时调用,因此当前页面被导航离开。

笔记:

这些方法使用的序列化格式仅供内部使用。您的应用程序不应对其形成任何依赖关系。此外,此格式仅支持基本类型(如字符串、字符、数字和 GUID 类型)的序列化。

于 2012-12-14T19:21:05.233 回答
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
    }
}
于 2013-02-11T20:35:07.920 回答