Оболочка Xamarin.Forms: есть ли способ использовать GoToAsyn c и Routing для перехода на вкладку, и pu sh страницу там - PullRequest
0 голосов
/ 08 марта 2020

Рассмотрим следующую оболочку Xamarin.Forms XAML:

 <TabBar>
        <Tab Title="Page1" Route="page1" Icon="page1.png">
            <ShellContent ContentTemplate="{DataTemplate local:Page1}" />
        </Tab>
        <Tab Title="Page2" Route="page2" Icon="page2.png">
            <ShellContent ContentTemplate="{DataTemplate local:Page2}" />
            <ShellContent Route="page2a" ContentTemplate="{DataTemplate local:Page2A}" />
        </Tab>
        <Tab Title="Page3" Route="page3" Icon="page3.png">
            <ShellContent ContentTemplate="{DataTemplate local:Page3}" />
        </Tab>
</TabBar>

Это приводит к 3 нижним вкладкам. На странице 2 есть также две верхние вкладки.

Я могу успешно перемещаться с такими вызовами, как: .GoToAsync("//page1") и .GoToAsync("//page2/page2a")

Я хотел бы, чтобы Page2A была страницей, которая толкается в верхней части вкладки Page2. Поэтому, когда я звоню GoToAsync("//page2/page2a"), приложение переходит на вкладку Page2, но отображает страницу Page2A сверху. Я бы не хотел иметь верхних вкладок, но вместо этого Page2A NavBar будет отображать кнопку «Назад», и при нажатии Page2A будет извлекаться из стека, и Page2 снова будет видна.

Есть ли способ добиться этого с Shell, возможно, путем настройки моего XAML?

В настоящее время я просто использую старый метод PushAsync(..), но, похоже, стыдно не использовать преимущества навигационных функций Shell.

1 Ответ

0 голосов
/ 09 марта 2020

Если вы хотите просмотреть sh страницу вверху без вкладки вверху страницы, вы можете использовать код ниже.

 Navigation.PushModalAsync(new NavigationPage(new ShellTabPage1_2()));

enter image description here

Если вы хотите кнопку возврата, вы можете создать с помощью ToolbarItem.

 <ContentPage.ToolbarItems>
    <ToolbarItem              
        IconImageSource="back_button.png"
        Order="Primary"
        Priority="0"
        Clicked="ToolbarItem_Clicked"/>
</ContentPage.ToolbarItems>
<ContentPage.Content>
    <StackLayout>
        <Label
            HorizontalOptions="CenterAndExpand"
            Text="Welcome to Shell Tab Page 1-2!"
            VerticalOptions="CenterAndExpand" />

    </StackLayout>
</ContentPage.Content>

Я мог перейдите на страницу оболочки с помощью перезагрузки главной страницы.

App.Current.MainPage = new ShellPage();

Но она не смогла перейти на вкладку оболочки.

Мы могли бы перейти на предыдущую страницу в оболочке.

await  Navigation.PopModalAsync(false);

enter image description here

Если вы хотите сделать кнопку возврата слева, вы можете сделать это с помощью пользовательского рендерера.

...