与往常一样,这取决于您具体追求什么。如果您只想在登陆页面时提取查询字符串值,请使用 NavigationContext.QueryString 提供的字典:
假设页面是使用以下 URL 调用的:
mainFrame.Navigate(new Uri("/Page1.xaml?Param=value", UriKind.Relative));
生成的 OnNavigatedTo 覆盖可能如下所示:
// Executes when the user navigates to this page.
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (NavigationContext.QueryString.ContainsKey("Param"))
{
paramText.Text = NavigationContext.QueryString["Param"];
}
}
然后由你根据传入的参数调整“Page1”上的内容。
现在,如果您想使用 Uri Mapping 并稍微清理一下您的 Uri,您可以声明一个 UriMapper 并将其交给您的导航框架,并使用它将您的“干净”网址更改为具有查询字符串的网址。
<Navigation:UriMapper x:Key="PageMapper">
<Navigation:UriMapping Uri="/Things/{value}" MappedUri="/Page1.xaml?Param={value}"/>
</Navigation:UriMapper>
调用时:
mainFrame.Navigate(new Uri("/Things/newValue", UriKind.Relative));
将使用上面在 OnNavigatedTo 中列出的相同调用,将“newValue”作为查询字符串(在您的情况下为 Id)传递,地址栏中显示以下内容:
'http://localhost:1877/SilverlightApplication3TestPage.aspx#/Things/newValue