0

请考虑以下 Xamarin.Forms Shell 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 的导航功能似乎很可惜。

4

1 回答 1

1

当您想在顶部没有页面选项卡的情况下将页面推送到顶部时,可以使用下面的代码。

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

在此处输入图像描述

如果你想要后退按钮,你可以用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>

我可以通过重置 MainPage 导航到 shell 页面。

App.Current.MainPage = new ShellPage();

但是,它无法导航到 shell 标签页。

我们可以在 shell 中导航到上一页。

await  Navigation.PopModalAsync(false);

在此处输入图像描述

如果您想在左侧制作后退按钮,您可以使用自定义渲染器来实现。

于 2020-03-09T07:39:23.853 回答