UWP Frame
позволяет только навигацию к типу страницы, используя метод Navigate(Type pageType, object parameter)
.Это означает, что новая навигация всегда создает новый экземпляр страницы.Вы не можете перейти к существующему экземпляру (хотя можно назначить экземпляр страницы для Frame.Content
, но это не правильный подход и противоречит всей цели Frame
).
Что вы можете сделать, это предоставить parameter
, который будет использоваться страницей, чтобы знать, что должно отображаться.Я думаю, что вас смутило то, что многие образцы используют параметр тега в пунктах меню, чтобы определить, к какому типу страницы следует перейти, но вы можете также легко использовать произвольную строку, которую затем можете использовать, чтобы узнать, куда вы хотите перейтинапример.Смотрите этот blogpost для аналогичного подхода.В качестве примера посмотрите это:
<NavigationViewItem Icon="Home" Tag="FirstPage">
<TextBlock>First</TextBlock>
</NavigationViewItem>
<NavigationViewItem Icon="Setting" Tag="SecondPage">
<TextBlock>Second</TextBlock>
</NavigationViewItem>
Теперь в коде, обрабатывающем выбор элемента:
private void nvTopLevelNav_ItemInvoked(NavigationView sender,
NavigationViewItemInvokedEventArgs args)
{
var item = args.InvokedItemContainer;
if (item != null)
{
switch (item.Tag)
{
case "FirstPage":
contentFrame.Navigate(typeof(SCWebViewPage), "someParam");
break;
case "SecondPage":
contentFrame.Navigate(typeof(SCWebViewPage), "differentParam");
break;
}
}
}
Теперь в коде SCWebViewPage
вы можете переопределить метод OnNavigatedTo
, проверьтеparameter
и действуйте соответственно:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (e.Parameter == "someParameter") ...
else ...
}
Пока параметр навигации является разделяемым типом (который, безусловно, string
), это никоим образом не повлияет на функциональность вашего приложения, и вы можете дажеПолностью сохраните и перезагрузите Frame
состояние навигации при приостановке / восстановлении.