Хорошее решение - установить имя для дочерних страниц с вкладками и вызвать функцию NavigateAsync
, используя имя страницы и имя нужной вкладки через NavigationParameters
.Проверьте следующий пример:
Частичный XAML из YourTabbedPage
.
...
<TabbedPage.Children>
<ContentPage Title="Tab 1" x:Name="tab1"/>
<ContentPage Title="Tab 2" x:Name="tab2"/>
<ContentPage Title="Tab 3" x:Name="tab3"/>
</TabbedPage.Children>
...
YourTabbedPage
должен знать, когда происходит OnNavigatingTo
.Благодаря Prism, если страница реализует интерфейс INavigatingAware
, она сможет читать параметры навигации.
...
public partial class YourTabbedPage : TabbedPage, INavigatingAware
{
public YourTabbedPage()
{
InitializeComponent();
}
public void OnNavigatingTo(NavigationParameters parameters)
{
if (parameters.TryGetValue("tab", out string tabName) == true)
{
SelectedItem = this.FindByName<Page>(tabName);
}
}
}
...
Наконец, перейдите непосредственно к нужной вкладке.
...
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<YourTabbedPage>();
}
protected override void OnInitialized()
{
InitializeComponent();
NavigationService.NavigateAsync(
"YourTabbedPage",
new NavigationParameters($"tab=tab2")
);
}
...
Iнадеюсь, это поможет!