2017-01-15 11 views
0

Я пытаюсь получить мастер-Detail навигации, сконфигурированный в моем Xamarin.Forms приложение с моей целевой UWP работает на ОС Windows 10.Xamarin.Forms Prism приложение не показывает мастер-Detail панель навигации

Когда я запускаю образца Master -Detail приложение обеспечивает Xamarin (после https://developer.xamarin.com/guides/xamarin-forms/user-interface/navigation/master-detail-page/), а также изменить MasterBehavior к поповеру, я вижу следующее поведение:

запуск:

enter image description here

выберите значок гамбургера:

enter image description here

Сделать выбор:

enter image description here

В моей призмой приложение, я перейти на главную/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> 

View1:

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

При запуске, я не вижу навигационную панель, только содержимое View1 (в настоящее время только красный экран):

enter image description here

Если я изменю MasterBehavior MainPage.xaml на Defa щ вместо поповер и удалить SetHasNavigationBar в View1, я вижу боковое меню, когда приложение запускает:

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> 

view1:

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

enter image description here

Когда Я делаю выбор после запуска с установкой MasterBehavior по умолчанию, теперь я вижу меню гамбургеров.

enter image description here

Есть что-нибудь, что я могу добавить или проверить в моем решении, чтобы имитировать поведение образца Xamarin с MasterBehavior набор Всплывающие?

ответ

3

Проблема здесь: var task = NavigationService.NavigateAsync("MainPage/View1");

Так как вы хотите, чтобы показать меню гамбургер, вы должны обернуть деталь в NavigationPage.Поэтому первым зарегистрировать NavigationPage для навигации

Container.RegisterTypeForNavigation<NavigationPage>();

Затем добавить его к пути навигации:

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

Кроме того, вы можете удалить подробную разметку в вашем Masterpage XAML, поскольку навигации службы построит его для вас.

0

Попробуйте сделать что-то вроде этого:

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

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