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

C# OnNavigatedTo()事件是否知道是谁导航到它的?,c#,windows-8,navigation,windows-store-apps,eventargs,C#,Windows 8,Navigation,Windows Store Apps,Eventargs,如果必须的话,我会在导航到某个页面时向该页面传递一个arg,但这是必要的吗?有没有办法知道哪个页面名为navigate(),而不这样做?您可以使用它,但它有一些不希望的副作用(它导航到当前页面之外,并且字符串是内部的,无法保证它可能/可能不会更改). 我想你最好还是把它传过去 调用此方法将调用当前 页面使用NavigationMode.Forward。GetNavigationState通常是 当应用程序被挂起时调用,因此当前页将被挂起 离开了 注: 这些应用程序使用的序列化格式 方法仅供内部使

如果必须的话,我会在导航到某个页面时向该页面传递一个arg,但这是必要的吗?有没有办法知道哪个页面名为navigate(),而不这样做?

您可以使用它,但它有一些不希望的副作用(它导航到当前页面之外,并且字符串是内部的,无法保证它可能/可能不会更改). 我想你最好还是把它传过去

调用此方法将调用当前 页面使用NavigationMode.Forward。GetNavigationState通常是 当应用程序被挂起时调用,因此当前页将被挂起 离开了

注:

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

您可以使用,但它有一些不希望的副作用(它导航到当前页面之外,并且字符串是内部的,无法保证它可能/可能不会更改)。我想你最好还是把它传过去

调用此方法将调用当前 页面使用NavigationMode.Forward。GetNavigationState通常是 当应用程序被挂起时调用,因此当前页将被挂起 离开了

注:

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


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

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

我遇到了这个问题,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;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    if (global_vals.previousPage.GetType().ToString() == "AppName.SomePage")
    {
        //do something
    }
}
OnNavigatedTo方法检查全局变量,如下所示:

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

我遇到了这个问题,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;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    if (global_vals.previousPage.GetType().ToString() == "AppName.SomePage")
    {
        //do something
    }
}
OnNavigatedTo方法检查全局变量,如下所示:

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