如何在所有视图Xamarin Forms上显示导航页面按钮

时间:2016-11-07 09:15:07

标签: xaml xamarin xamarin.forms

我正在使用Xamarin Forms,我正在使用MasterDetailPage和NavigationPage,一切正常。现在,我需要配置页面按钮(左边的三个条)以在所有视图上显示。

我有一个带有菜单的MasterDetailPage,用户点击菜单导航到其他页面。第一页(主页)看起来像那样:

<MasterDetailPage.Detail>
    <NavigationPage>
        <x:Arguments>
            <home:HomePage />
        </x:Arguments>
    </NavigationPage>
</MasterDetailPage.Detail>

enter image description here

当用户点击masterdetailpage内的菜单或masterdetailpage外的其他菜单时,它会执行导航:

enter image description here

三个小节页面按钮仅在第一个视图中可见,当我导航到其他视图时,该按钮消失。

但是,我想要这样的东西:

enter image description here

当我导航到其他页面时,页面后退按钮会自动显示,并且没问题。

如何让三个小节页面按钮对所有视图都可见并保持后页按钮?

我使用以下代码在视图之间导航:

await Navigation.PushAsync(MyNewPage());

谢谢!

3 个答案:

答案 0 :(得分:1)

这是不可能的,因为左侧不能有两个按钮。和我见过的许多应用程序一样,没有应用程序支持这种UI。除非你编写自定义导航栏并将其放在每个页面的顶部。

您可以在主MasterDetailPage中创建一堆详细信息页面。因此,无论何时您想要推送新页面,您都可以将页面设置为详细信息并将旧详细信息放入您自己的堆栈中。

对于Android,您可以将按钮事件从堆栈中回滚到弹出页面,但在iOS上没有后退按钮,因此您必须在详细信息页面的工具栏中创建某种后退按钮。

答案 1 :(得分:1)

您的主详细信息页面必须处理详细信息页面的导航才能正常工作。

连接菜单列表视图:

  • ListView.ItemSelected + = OnItemSelected;

在OnItemSelected事件中。

  • {MasterDetailPage} .Detail.Navigation.PushAsync(new MyNewPage());

以下是主细节导航示例:

    async void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        var item = e.SelectedItem as MasterPageItem;

        if (item != null)
        {                
            NavigationPage nextDetailPage = null;
            await Task.Run(() =>
            {                    
                nextDetailPage = new NavigationPage((Page)Activator.CreateInstance(item.TargetType));                   
            });
            Detail = nextDetailPage;
            masterPage.ListView.SelectedItem = null;
            IsPresented = false;                
        }
    }

答案 2 :(得分:1)

我认为您必须编写自定义渲染器才能实现您想要的效果。 但是,如果您只想保留汉堡包按钮而不使用后退按钮,则可以使用以下代码导航到您的页面:

Detail = new NavigationPage(new MyNewPage());