2016-12-19 9 views
2

Ich versuche eine App mit Prism in Xamarin Forms zu erstellen.hamburger menüprisma xamarin formen?

Xamarin Forms Version: 2.3.3.175

Prism Version: 6.2.0

Der Hamburger Menü funktioniert in Android, aber wenn ich es UWP laufen wird es nicht das Symbol angezeigt werden und auch, wenn ich durch navigieren Menü, verschwindet das Menü vollständig und ich habe nicht die Methode, um zu anderen Seiten zu gehen. Mit anderen Worten, ich muss die App schließen und neu starten.

Hier ist, was ich bisher versucht habe.

  1. Nach dem Prisma Projekt erstellt habe ich eine MasterDetailPage:

    <MasterDetailPage.Master> 
        <ContentPage Title="Default"> 
         <StackLayout> 
          <Button Text="Billing" Command="{Binding Path=NavigationCommand}" CommandParameter="MyNavigationPage/BillingPage"/> 
          <Button Text="Your Order" Command="{Binding Path=NavigationCommand}" CommandParameter="MyNavigationPage/PlaceOrderPage"/> 
          <Button Text="Settings" Command="{Binding Path=NavigationCommand}" CommandParameter="MyNavigationPage/SettingsPage"/> 
          <Button Text="Settings"/> 
         </StackLayout> 
        </ContentPage> 
    </MasterDetailPage.Master> 
    

MasterDetailPage Ansichtsmodell

public class MDPageViewModel : BindableBase 
    { 
     private INavigationService _navigationService; 


     public DelegateCommand<string> NavigationCommand => new DelegateCommand<string>(Navigation); 



     public MDPageViewModel(INavigationService navigationService) 
     { 
      _navigationService = navigationService; 

     } 

     private void Navigation(string page) 
     { 
      _navigationService.NavigateAsync(page); 
     } 
    } 
  1. Danach habe ich eine Navigationsseite und auch entsprechende Seiten und Ansichtsmodelle erstellt. Hier ist App.xaml.cs Datei:

    public partial class App: PrismApplication { öffentliche App (IPlatformInitializer initializer = null): base (initializer) {}

    protected override void OnInitialized() 
        { 
         InitializeComponent(); 
    
         NavigationService.NavigateAsync("MDPage/MyNavigationPage/ItemsPage"); 
        } 
    
        protected override void RegisterTypes() 
        { 
         Container.RegisterTypeForNavigation<MDPage>(); 
         Container.RegisterTypeForNavigation<BillingPage>(); 
         Container.RegisterTypeForNavigation<PlaceOrderPage>(); 
         Container.RegisterTypeForNavigation<SettingsPage>(); 
         Container.RegisterTypeForNavigation<MyNavigationPage>(); 
        } 
    } 
    
  2. Also, wenn ich das laufen App in UWP lädt es wie dieses enter image description here

Aber wenn ich auf die Links in Menü klicken, Menü verschwindet und es sieht so aus.

enter image description here

Was ich tue, falsch und wie kann ich es lösen?

Ich habe ein Projekt in GitHub erstellt, so dass Sie den Fehler einfach anzeigen können. Diese

https://github.com/codemasterblackperl/Hamburger_Menu_Prism_Forms_Repo

Antwort

2

Dies ist ein Fehler in der neuesten Version von Xamarin. Es funktioniert bei Verwendung von 2.3.1.114. Ich habe den Bug here gepostet, seit ich gerade in diesem lief.

0

werden Ihre Frage teilweise beantworten. Ich konnte das Symbol nicht sehen, obwohl es in den Prism.Forms-Dokumenten dokumentiert ist. gehen, um das Symbol zu erhalten, auf die App.xaml in Ihrem UWP-Projekt und fügen Sie die folgende Datenvorlage zwischen <Application.Resources>...</Application.Resources>

<DataTemplate x:Key="ItemTemplate"> 
    <uwp:ItemControl HorizontalContentAlignment="Stretch" 
        VerticalContentAlignment="Stretch" /> 
</DataTemplate> 

Definieren Sie die UWP-Präfix an der Spitze wie xmlns:uwp="using:Xamarin.Forms.Platform"

Sie App.XAML sollte wie folgt aussehen:

<Application x:Class="MyApp.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:uwp="using:Xamarin.Forms.Platform"> 
<Application.Resources> 
    <DataTemplate x:Key="ItemTemplate"> 
     <uwp:ItemControl HorizontalContentAlignment="Stretch" 
         VerticalContentAlignment="Stretch" /> 
    </DataTemplate> 
</Application.Resources> 

Nachdem Sie getan haben, dass, es wird das Symbol angezeigt werden soll. Dies zeigt Ihnen jedoch, dass nach dem Klicken auf ein Element im Master das Menü minimiert wird. Das konnte ich nicht beheben.

+0

ich einige Fehler bekam, wenn ich das obige Verfahren versucht, die Sie erwähnt. Außerdem habe ich ein Projekt in GitHub erstellt, damit Sie den Fehler leicht sehen können. https://github.com/codemasterblackperl/Hamburger_Menu_Prism_Forms_Repo –

0

Verwenden Sie einfach IMasterDetailPageOptions Schnittstelle in Ihrem Masterdetail Code-Behind:

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

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