使用 AppShell 在 Xamarin Forms 中显示 ToolbarItem

Showing ToolbarItem in Xamarin Forms with AppShell

在我的 Xamarin Forms 5 应用程序中,我试图将 ToolbarItem 添加到 ContentPage,它是 TabbedPage 的“子项”,但 ToolbarItem 没有显示。

这里的关键点是应用程序使用 AppShell 并且选项卡在 AppShell.xaml 中定义,如下所示:

<FlyoutItem Title="Home">
   <FlyoutItem.Icon>
      <FontImageSource
         FontFamily="MISHRP"
         Glyph="{StaticResource HomeIcon}"
         Color="White" />
   </FlyoutItem.Icon>
   <ShellContent Route="HomePage" ContentTemplate="{DataTemplate local:HomePage}" />
</FlyoutItem>

并且主页有三个选项卡指向 ContentPage 的:

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            ... // Removed for brevity>
    <local:CommercialFeed Title="Feed" />
    <local:PersonalCard Title="Card" />
    <local:Vendors Title="Vendors" />
</TabbedPage>

我现在在“供应商”页面中添加 ToolbarItem,但它没有显示。我读到我需要将主页包装在 NavigationPage.

我这里有两个问题:

  1. 因为我使用的是 AppShell,所以我的代码如下所示:MainPage = new AppShell();。所以不确定如何处理这部分。我试过 MainPage = new NavigationPage(new AppShell()); 但这又造成了另一个问题——见下文——它也使应用程序崩溃了。
  2. 我有一个登录页面,它也在 AppShell 中定义。当我尝试上面的代码时,我在登录页面上也有一个导航栏,这是一个问题。登录页面不应该有导航栏。

我该如何处理才能在我的供应商页面中显示 ToolbarItems?谢谢。

首先,我认为将 Shell 和旧的 TabbedPage 混合使用是个坏主意(使用其中任何一个),我认为最好更改 ui 结构从 TabbedPageTabbarTab 的组合,两者都在 Shell Xamarin.Forms Shell tabs.

    <TabBar>

        <Tab Title="Feed">
            <ShellContent Title="Feed" ContentTemplate="{DataTemplate local:CommercialFeed}"/>
        </Tab>

        <Tab Title="Cards">
            <ShellContent Title="Cards" ContentTemplate="{DataTemplate PersonalCard}"/>
        </Tab>

        <Tab Title="Vendors">
            <ShellContent Title="Vendors" ContentTemplate="{DataTemplate local:Vendors}"/>
        </Tab>

    </TabBar>

现在在每个页面上定义ToolbarItems

    <ContentPage.ToolbarItems>
        <ToolbarItem Text="..." .../>
    </ContentPage.ToolbarItems>

如果您想继续使用 TabbedPage,请选中 How to add toolbar item in TabbedPage in Xamarin Form