Установить вкладку по умолчанию в оболочке Xamarin Forms - PullRequest
1 голос
/ 28 июня 2019

Как установить выбранную по умолчанию вкладку внутри панели вкладок в оболочке форм Xamarin?

<?xml version="1.0" encoding="UTF-8"?>
<Shell xmlns="http://xamarin.com/schemas/2014/forms" 
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
         x:Class="TestApp.NavigationShell"
         xmlns:pages="clr-namespace:TestApp.Pages"
         xmlns:pageModels="clr-namespace:TestApp.PageModels">
<TabBar Route="testapp">
    <Tab Title="Saved" Icon="tabDashboard" Route="dashboard"><ShellContent ContentTemplate="{DataTemplate pages:DashBoardPage}"/></Tab>
    <Tab Title="Calendar" Icon="tabCalendar" Route="calendar"><ShellContent ContentTemplate="{DataTemplate pages:CalendarPage}"/></Tab>
    <Tab Title="Search" Icon="tabSearch" Route="search"><ShellContent ContentTemplate="{DataTemplate pages:SearchPage}"/></Tab>
    <Tab Title="Support" Icon="tabSupport" Route="support"><ShellContent ContentTemplate="{DataTemplate pages:SupportPage}"/></Tab>
    <Tab Title="Profile" Icon="tabAccount" Route="account"><ShellContent ContentTemplate="{DataTemplate pages:AccountPage}"/></Tab>
</TabBar>

В соответствии с документацией форм Xamarin, первое содержимое оболочки будет содержимым по умолчаниюна экране.Тем не мение;Я пытаюсь установить страницу «Поиск» в качестве вкладки по умолчанию, а не «Сохранено».

Я попытался установить Tab Index - не повезло, я также пытался вызвать маршрутизацию для метода onAppearing в Shell, но похоже, что метод Shell при появлении никогда не запускается.

Я пытался перейти к Search asхорошо:

public partial class NavigationShell : Shell
{
    public NavigationShell()
    {
        InitializeComponent();
        //Shell.Current.TabIndex = 2;
    }

    protected override async void OnAppearing()
    {
        base.OnAppearing();
        //await Shell.Current.GoToAsync("testapp/search");
    }
}

Что может быть лучшим решением, когда при открытии приложения необходимо установить вкладку по умолчанию?

Спасибо.

1 Ответ

0 голосов
/ 28 июня 2019

Неважно, я думаю, что нашел решение.

public Page Init(Shell root)
{
    CurrentShell = root;
    root.CurrentItem.CurrentItem = root.CurrentItem.Items[2];
    return CurrentShell;
}

Так как в моей оболочке есть ТОЛЬКО один корневой элемент, который является самой вкладкой. Я просто получил вкладку поиска и назначил текущий элемент первого ребенка, и это сработало.

Пожалуйста, оставьте свои ответы, если вы нашли другой способ. Спасибо.

...