Xamarin Forms 中没有后退按钮的选项卡式页面

Tabbed Page without Back button in Xamarin Forms

在我的 Xamarin Forms 5 应用程序中,我在 AppShell 的页脚中有一个设置图标,单击后会打开一个 TabbedPage。这部分工作正常,但当页面打开时,我看到顶部的后退按钮。我希望此 TabbedPage 的外观和行为与 FlyoutItems 部分中的任何其他页面一样。

这是我要创建的效果:

我可以在 ShellFooter 中使用以下内容创建它:

<Grid xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
      x:Class="Ingrid.Connect.Views.FlyoutFooter"
      RowDefinitions="120"
      ColumnDefinitions="150, 150">
    <Image
        Grid.Row="0"
        Grid.Column="0"
        HorizontalOptions="StartAndExpand"
        Margin="50,0,0,0">
        <Image.Source>
            <FontImageSource
                FontFamily="MISHRP"
                Glyph="{StaticResource SettingsIcon}"
                Color="White"/>
        </Image.Source>
        <Image.GestureRecognizers>
            <TapGestureRecognizer
                Tapped="Settings_Tapped" />
        </Image.GestureRecognizers>
    </Image>
    <Image
        Grid.Row="0"
        Grid.Column="1"
        HorizontalOptions="EndAndExpand"
        Margin="0,0,30,0">
        <Image.Source>
            <FontImageSource
                FontFamily="MISHRP"
                Glyph="{StaticResource PowerIcon}"
                Color="White"/>
        </Image.Source>
        <Image.GestureRecognizers>
            <TapGestureRecognizer
                Tapped="LogOut_Tapped" />
        </Image.GestureRecognizers>
    </Image>
</Grid>

Settings_Tapped 方法如下所示:

async void Settings_Tapped(object sender, EventArgs e)
{
    await Shell.Current.GoToAsync(nameof(SettingsPage));
}

SettingsPage 只是一个 TabbedPage。此设置有效,但正如我所说,我确实在页面顶部获得了“后退”按钮。我希望“设置”页面的外观和行为与应用程序中的任何其他页面一样。

顺便说一句,我尝试添加 NavigationPage.SetHasBackButton(SettingsPage, false); 但这给了我一个错误。上面写着:

'SettingsPage' is a type, which is not valid in the given context

知道如何使 SettingsPage 的外观和行为与其他页面一样吗?

其他页面都是包裹在ShellContent中的项目,如果你使用GoToAsync,新页面和主页面将不会显示在同一层stack.So你可以包裹settingspage并更改currentitem时点击像这样的按钮:

  • xmal:

    <FlyoutItem Title="."  IsVisible="False" x:Name="mysettings">
          <ShellContent Route="ItemsPage" ContentTemplate="{DataTemplate local:SettingsPage}" />
      </FlyoutItem>
    
  • 点击按钮:

    Shell.Current.CurrentItem=mysettings;