2016-04-18 16 views
2

Der folgende Code funktioniert:Xamarin.Forms: Wie fügt man eine NavigationPage XAML-Klasse zu einer anderen XAML-Klasse hinzu?

<?xml version="1.0" encoding="utf-8" ?> 
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="MyApp.MainTabbedPage"> 
    <NavigationPage Title="asdfee"> 
    <x:Arguments> 
     <ContentPage Title="asdf"> 
     <Label Text="asdfawwer"/> 
     </ContentPage> 
    </x:Arguments> 
    </NavigationPage> 
</TabbedPage> 

Aber wenn ich die NavigationPage in einer separaten XAML-Datei in einem anderen Verzeichnis haben will, ist es nicht funktioniert. Zum Beispiel:

<?xml version="1.0" encoding="utf-8" ?> 
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="MyApp.MainTabbedPage" 
      xmlns:layouts="clr-namespace:MyApp.Layouts"> 

    <layouts:MyNavigationPage Title="asdfee"/> 

</TabbedPage> 

Sein MyNavigationPage.xaml innerhalb Layouts Verzeichnis, aber mit genau den gleichen Code aus dem vorherigen Code:

<?xml version="1.0" encoding="utf-8" ?> 
<NavigationPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="MyApp.Layouts.MyNavigationPage"> 
    <x:Arguments> 
    <ContentPage Title="asdf"> 
     <Label Text="asdfawwer"/> 
    </ContentPage> 
    </x:Arguments> 
</NavigationPage> 

Wenn ich es auf diese Weise tun, wirft es die folgenden Fehler:

System.InvalidOperationException: NavigationPage must have a root Page before being used. Either call PushAsync with a valid Page, or pass a Page to the constructor before usage.

Ich bekam diesen gleichen Fehler zuvor, als der gesamte Code lik war e die in der ersten Beispiel und ich hatte nicht die <x:Arguments> vor den Kindern NavigationPage. Ich vermute also ein Problem mit der Kindererstellungsreihenfolge.

Auch wenn ich den zweiten Ansatz mit einem ContentPage mache, funktioniert es.

Mache ich etwas falsch oder sollte ich einen Fehlerbericht ausfüllen?

Irgendeine Idee?

Dank

Antwort

0

Ich glaube nicht, dass Sie eine NavigationPage in XAML erstellen. Ich mache es immer von Code:

var nav = new NavigationPage(new MyContentXaml()); 
+0

Ich mag diesen Ansatz nicht als fix. Entweder ich habe alles in C# oder alle meine Layout in XAML. Und es funktioniert in XAML. Obwohl es in diesem Fall ein merkwürdiges Verhalten hat. – Dpedrinha

Verwandte Themen