Visual studio 2015 带导航的主细节?

Visual studio 2015 带导航的主细节?,visual-studio-2015,xamarin.forms,Visual Studio 2015,Xamarin.forms,我正试图使用Xamarin.Forms MasterDetail页面来实现汉堡菜单导航。我遇到的问题是,取决于我如何更改详细信息页面,要么汉堡菜单消失,但返回功能正常工作,要么汉堡保留,但我们失去了浏览详细信息页面的能力(硬件/屏幕返回按钮将用户返回到设备的主屏幕) 使用最新的XF(2.3.4.247)很容易复制该问题;在Visual Studio中创建新的跨平台应用程序(Xamarin)。确保所有Nuget软件包都是最新的。然后在共享项目中添加一个名为MyMasterPage的MasterDe

我正试图使用Xamarin.Forms MasterDetail页面来实现汉堡菜单导航。我遇到的问题是,取决于我如何更改详细信息页面,要么汉堡菜单消失,但返回功能正常工作,要么汉堡保留,但我们失去了浏览详细信息页面的能力(硬件/屏幕返回按钮将用户返回到设备的主屏幕)

使用最新的XF(2.3.4.247)很容易复制该问题;在Visual Studio中创建新的
跨平台应用程序(Xamarin)
。确保所有Nuget软件包都是最新的。然后在共享项目中添加一个名为
MyMasterPage
MasterDetail
页面

默认情况下,在
ListView\u ItemSelected
中的
MyMasterDetailPage.xaml.cs
中有一行
Detail=new-NavigationPage(page)
,该行保留汉堡菜单,但实际上不会在详细页面之间导航。按下Android上的后退键关闭应用程序

如果将行更改为
Detail.Navigation.PushAsync(page,true)
back按钮工作,您可以浏览以前打开的所有子项,但汉堡图标将替换为另一个
back
按钮(除设备正常显示的按钮外)


如何让汉堡包菜单保持不变,以便用户可以在所有页面上访问它,同时仍然允许用户返回到以前的详细信息页面?

您需要遵循此示例

在我的App.xaml.cs上,我将其重定向到菜单页面

MainPage = new MainMenu();
接下来,我创建了MainMenu视图,它是一个MasterDetailPage

<MasterDetailPage.Master>

    <ContentPage 
            Icon="hamburger_menu.png" 
            Title="MyTitle"
            BackgroundColor="#29632A"
            >

        <!--Menu Title background color--> 

         <!--Slide out Menu--> 
        <StackLayout VerticalOptions="FillAndExpand" >

            <!--Menu Header Layout-->

            <Label 
                Text="MyTitle" 
                TextColor="White" 
                FontSize="22" 
                VerticalOptions="Center" 
                HorizontalOptions="Center" 
                Margin="0, -10, 0, 5" />

            <ListView 
                    x:Name="MenuListView"
                    ItemsSource="{Binding MainMenuItems}"
                    ItemSelected="MainMenuItem_Selected"
                    VerticalOptions="FillAndExpand" 
                    SeparatorVisibility="None" 
                    BackgroundColor="#f5f5f5">
                 <!--Menu background color--> 
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <ViewCell.View>
                                <StackLayout Orientation="Horizontal" Padding="10,0,0,0">
                                     <!--Menu layout-->

                                    <Label Text="{Binding Title}" FontSize="18" VerticalTextAlignment="Center"/>

                                </StackLayout>
                            </ViewCell.View>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackLayout>

    </ContentPage>
</MasterDetailPage.Master>

main menu.xaml.cs

    public partial class MainMenu : MasterDetailPage
{
    public List<MainMenuItem> MainMenuItems { get; set; }

    public MainMenu ()
    {
        BindingContext = this;

        // Build the Menu
        MainMenuItems = new List<MainMenuItem>()
        {
            new MainMenuItem() { Title = "Menu1", Icon = "menu1.png", IconSize = 18, TargetType = typeof(Menu1) },
            new MainMenuItem() { Title = "Menu2", Icon = "menu2.png", IconSize = 18, TargetType = typeof(Menu2) }
        };

        // Set the default page, this is the "home" page.
        ChangeDetail(new Menu1());
        InitializeComponent ();

    }

    // When a MenuItem is selected.
    public void MainMenuItem_Selected(object sender, SelectedItemChangedEventArgs e)
    {
        var item = e.SelectedItem as MainMenuItem;
        if (item != null)
        {
            if (item.Title.Equals("Menu1"))
            {
                ChangeDetail(new Menu1());
            }
            else if (item.Title.Equals("Menu2"))
            {
                ChangeDetail(new Menu2());
            }

            MenuListView.SelectedItem = null;
            IsPresented = false;
        }
    }

    public void ChangeDetail(Page page)
    {
        var navigationPage = Detail as NavigationPage;
        if (navigationPage != null)
        {
            navigationPage.PushAsync(page);
            return;
        }
        Detail = new NavigationPage(page) { BarBackgroundColor = Color.FromHex("#FF0000"), BarTextColor = Color.White };
    }
}
public部分类主菜单:MasterDetailPage
{
公共列表MainMenuItems{get;set;}
公共主菜单()
{
BindingContext=这个;
//构建菜单
MainMenuItems=新列表()
{
新建MainMenuItem(){Title=“Menu1”,Icon=“Menu1.png”,IconSize=18,TargetType=typeof(Menu1)},
新建MainMenuItem(){Title=“Menu2”,Icon=“Menu2.png”,IconSize=18,TargetType=typeof(Menu2)}
};
//设置默认页面,这是“主页”。
ChangeDetail(新菜单1());
初始化组件();
}
//选择菜单项时。
public void MainMenuItem_选中(对象发送方,SelectedItemChangedEventArgs e)
{
var item=e.选择editem作为主菜单项;
如果(项!=null)
{
if(项目名称等于(“菜单1”))
{
ChangeDetail(新菜单1());
}
else if(item.Title.Equals(“Menu2”))
{
ChangeDetail(新菜单2());
}
MenuListView.SelectedItem=null;
IsPresented=假;
}
}
公共无效更改详细信息(第页)
{
var navigationPage=作为navigationPage的详细信息;
如果(navigationPage!=null)
{
navigationPage.PushAsync(第页);
返回;
}
详细信息=新导航页面(第页){BarBackgroundColor=Color.FromHex(“#FF0000”),BarTextColor=Color.White};
}
}

来自我的问题:“默认情况下,在ListView_ItemSelected中的MyMasterDetailPage.xaml.cs中,有一行Detail=new NavigationPage(页面),它保留汉堡菜单,但实际上不会在详细页面之间导航。按下Android关闭应用程序。”你能分享你的代码,让我们看看发生了什么吗?