Visual studio 2015 带导航的主细节?
我正试图使用Xamarin.Forms MasterDetail页面来实现汉堡菜单导航。我遇到的问题是,取决于我如何更改详细信息页面,要么汉堡菜单消失,但返回功能正常工作,要么汉堡保留,但我们失去了浏览详细信息页面的能力(硬件/屏幕返回按钮将用户返回到设备的主屏幕) 使用最新的XF(2.3.4.247)很容易复制该问题;在Visual Studio中创建新的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)
。确保所有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关闭应用程序。”你能分享你的代码,让我们看看发生了什么吗?