Xamarin.Forms Prism应用程序没有显示Master-Detail导航栏

时间:2017-01-15 05:38:14

标签: xamarin navigation xamarin.forms prism master-detail

我正在尝试在我的Xamarin.Forms应用程序中配置Master-Detail导航,并在Windows 10上运行我的UWP目标。

当我运行Xamarin提供的示例Master-Detail应用程序(在https://developer.xamarin.com/guides/xamarin-forms/user-interface/navigation/master-detail-page/之后),并将MasterBehavior更改为Popover时,我看到以下行为:

启动:

enter image description here

选择汉堡包图标:

enter image description here

进行选择:

enter image description here

在我的棱镜应用程序中,我导航到MainPage / View1:

protected override void OnInitialized()
{
    InitializeComponent();
    var task = NavigationService.NavigateAsync("MainPage/View1");
    ...
}

MainPage是我的MasterDetailPage,MasterBehavior设置为Popover,View1是ContentPage。

的MainPage:

<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
                  xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                  xmlns:views="clr-namespace:My.Mobile.Application.Views;assembly=My.Mobile.Application"
                  x:Class="My.Mobile.Application.Frame.MainPage"
                  MasterBehavior="Popover">
  <MasterDetailPage.Master>
    <views:MasterPage x:Name="masterPage" />
  </MasterDetailPage.Master>
  <MasterDetailPage.Detail>
    <NavigationPage>
      <x:Arguments>
        <views:View1 />
      </x:Arguments>
    </NavigationPage>
  </MasterDetailPage.Detail>
</MasterDetailPage>

视图1:

public View1()
{
  NavigationPage.SetHasNavigationBar(this,false);
  InitializeComponent();
}

启动时,我看不到任何导航栏,只看到View1的内容(目前只是一个红色的屏幕):

enter image description here

如果我将MainPage.xaml的MasterBehavior更改为Default而不是Popover,并删除View1中的SetHasNavigationBar,我会在应用启动时看到侧边菜单:

的MainPage:

<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
                  xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                  xmlns:views="clr-namespace:My.Mobile.Application.Views;assembly=My.Mobile.Application"
                  x:Class="My.Mobile.Application.Frame.MainPage"
                  MasterBehavior="Default">
  <MasterDetailPage.Master>
    <views:MasterPage x:Name="masterPage" />
  </MasterDetailPage.Master>
  <MasterDetailPage.Detail>
    <NavigationPage>
      <x:Arguments>
        <views:View1 />
      </x:Arguments>
    </NavigationPage>
  </MasterDetailPage.Detail>
</MasterDetailPage>

视图1:

public View1()
{
  //NavigationPage.SetHasNavigationBar(this,false);
  InitializeComponent();
}

enter image description here

当我在启动后选择MasterBehavior设置为Default时,我现在看到汉堡包菜单。

enter image description here

我可以在我的解决方案中添加或验证任何模仿Xamarin样本行为并将MasterBehavior设置为Popup的内容吗?

2 个答案:

答案 0 :(得分:3)

问题在于:Production

由于您想要显示汉堡包菜单,您需要将详细信息包装在NavigationPage中。所以首先注册一个NavigationPage进行导航

var task = NavigationService.NavigateAsync("MainPage/View1");

然后将其添加到导航路径:

Container.RegisterTypeForNavigation<NavigationPage>();

此外,您可以删除MasterPage XAML中的详细标记,因为导航服务会为您构建它。

答案 1 :(得分:0)

尝试做这样的事情:

public partial class ShellView : MasterDetailPage, IMasterDetailPageOptions
{
    public ShellView()
    {
        InitializeComponent();
    }

    public bool IsPresentedAfterNavigation
    {
        get { return Device.Idiom != TargetIdiom.Phone; }
    }
}