如何使工具栏项仅在某些页面中显示

时间:2018-09-16 13:21:42

标签: xaml xamarin.forms

您将能够从下面的代码中看出该应用程序的当前视觉效果如下:

顶部的“新建”工具栏项和下面的选项卡式页面。而且,无论我选择哪个页面,工具栏都仍然位于顶部。我希望工具栏仅在第一页中可见。这有可能吗?我不能放入StackLayout中。

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:Test_101"
             x:Class="Test_101.MainPage">
    <ContentPage Title="Main">
        <ContentPage.ToolbarItems>
            <ToolbarItem Text="New" Order="Primary"/>
        </ContentPage.ToolbarItems>
        <StackLayout>
            <SearchBar Placeholder="Search..." TextChanged="SearchBar_OnTextChanged"/>
            <ListView x:Name="ListView" IsPullToRefreshEnabled="True" Refreshing="ListView_OnRefreshing">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <TextCell Text="{Binding FName}" Detail="{Binding Skill, StringFormat='Skill: {0}'}"/>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackLayout>
    </ContentPage>
    <local:Tryouts Title="Tryouts"/>
    <local:Credits Title="Credits"/>
</TabbedPage>

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码行从工具栏中删除那些不需要的图标,将其添加到构造函数或onResume方法中

int position = 0;     //Add your icon position
ToolbarItems.RemoveAt(position);

答案 1 :(得分:0)

您不能将工具栏直接设置为隐藏。因为contentPage位于RootViewController和Xamarin.forms中,所以不提供这种方法。

因此,我建议您可以创建“自定义渲染器”。然后在iOS和Android中都设置此属性。关于如何使用自定义渲染器,您可以参考链接:HERE

例如

在iOS中:

...
using xxx;(your forms's namespace)
using xxx.iOS;
...
[assembly: ExportRenderer(typeof(Tryouts),typeof(Tryouts_iOS))]
namespace xxx.iOS
{
    public class Tryouts_iOS:PageRenderer
    {
      public Tryouts_iOS()
      {

      }

      public override void ViewWillAppear(bool animated)
      {
        base.ViewWillAppear(animated);
        NavigationController.NavigationBar.Hidden=true;
      }

      public override void ViewWillDisappear(bool animated)
      {
        base.ViewWillDisappear(animated);
        NavigationController.NavigationBar.Hidden = false;
      }

    }
}