使用 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
.
中
我这里有两个问题:
- 因为我使用的是 AppShell,所以我的代码如下所示:
MainPage = new AppShell();
。所以不确定如何处理这部分。我试过 MainPage = new NavigationPage(new AppShell());
但这又造成了另一个问题——见下文——它也使应用程序崩溃了。
- 我有一个登录页面,它也在
AppShell
中定义。当我尝试上面的代码时,我在登录页面上也有一个导航栏,这是一个问题。登录页面不应该有导航栏。
我该如何处理才能在我的供应商页面中显示 ToolbarItems
?谢谢。
首先,我认为将 Shell
和旧的 TabbedPage
混合使用是个坏主意(使用其中任何一个),我认为最好更改 ui 结构从 TabbedPage
到 Tabbar
和 Tab
的组合,两者都在 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
在我的 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
.
我这里有两个问题:
- 因为我使用的是 AppShell,所以我的代码如下所示:
MainPage = new AppShell();
。所以不确定如何处理这部分。我试过MainPage = new NavigationPage(new AppShell());
但这又造成了另一个问题——见下文——它也使应用程序崩溃了。 - 我有一个登录页面,它也在
AppShell
中定义。当我尝试上面的代码时,我在登录页面上也有一个导航栏,这是一个问题。登录页面不应该有导航栏。
我该如何处理才能在我的供应商页面中显示 ToolbarItems
?谢谢。
首先,我认为将 Shell
和旧的 TabbedPage
混合使用是个坏主意(使用其中任何一个),我认为最好更改 ui 结构从 TabbedPage
到 Tabbar
和 Tab
的组合,两者都在 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