如何在Windows 10的通用应用程序中修改当前页面的Frame参数

时间:2016-03-09 15:51:27

标签: win-universal-app windows-10-universal

适用于Windows 10的通用应用使用Frame来导航不同的Page。这些页面中的一些具有参数,例如产品标识符,用于告诉他们要显示什么。这些参数传递给Frame.Navigate()

有时我使用不完美的信息导航到页面。然后,我使用该信息查找其他信息,告诉我要显示的内容。我想用这些附加信息更新导航参数,以避免在用户向后或向前导航时重新进行查找。

我最初的想法是干涉PageStackEntry Frame顶部的BackStack,其中包含以下内容:

IList<PageStackEntry> stack = frame.ForwardStack;
if (stack.Count > 0)
{
    PageStackEntry stackEntry = stack[stack.Count - 1];

    // PageStackEntry properties don't have setters, so create a new entry:
    stack[stack.Count - 1] = new PageStackEntry(
        stackEntry.SourcePageType,
        (my updated parameter goes here),
        stackEntry.NavigationTransitionInfo);
}

然而,事实证明,BackStack不包括当前页面。 (ForwardStack也没有。)如果有任何PageStackEntry描述当前页面,我不知道它在哪里。

我唯一的另一个想法是调用GetNavigationState(),篡改结果字符串( 包含当前页面状态的描述),然后调用SetNavigationState() 。我犹豫不决,因为the documentation声明序列化格式是正式未定义的:

  

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

序列化导航状态的示例如下所示(对于单个页面);弄清楚格式的细节应该是可行的:

1,1,0,60,MyApp.UX.Pages.MyPage,12,34,{"Data":{"PrimaryParameter":"42"}},0

但是“你的应用不应该对格式形成任何依赖”听起来......至少可以说是输出。我很高兴对此事有任何想法和建议。

1 个答案:

答案 0 :(得分:0)

我不认为传递参数就像是一个很好的理想。有更多的自适应方法可以解决这个问题,其中一种方法是创建一个参数类来保存数据,在导航时传递它,并在着陆页面上将其转换为正确的类型。