Как всегда, это зависит от того, что именно вы ищете.Если вы просто хотите получить значение строки запроса при входе на страницу, используйте словарь, предоставленный 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 и передать его в свой фрейм навигации, и использовать его, чтобы изменить ваш «чистый» URL-адрес на тот, в котором есть строка запроса.
<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