Xamarin.Forms:如何将NavigationPage XAML类添加到另一个XAML类?

时间:2016-04-18 23:12:22

标签: xamarin xamarin.forms

以下代码可以正常使用:

<?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>

但是如果我想将NavigationPage放在一个单独的XAML文件中,在另一个目录中,它就不起作用了。例如:

<?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>

在Layouts目录中 MyNavigationPage.xaml ,但使用上一代码中的完全相同的代码

<?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>

当我这样做时,它会抛出以下错误:

  

System.InvalidOperationException:NavigationPage必须具有根页面   在使用之前。使用有效页面调用PushAsync,或传递a   在使用之前转向构造函数。

在所有代码与第一个示例中的代码相似之前我得到了同样的错误,并且我在 NavigationPage的子代之前没有<x:Arguments> 即可。所以我猜测孩子创建顺序是个问题。

此外,如果我使用 ContentPage 进行第二种方法,则可行。

我做错了什么或者我应该填写错误报告吗?

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:2)

@Dpedrinha

这是可能的。

  

Xamarin.Forms:如何将NavigationPage XAML类添加到另一个XAML类?

Example for NavigationPage in XAML

答案 1 :(得分:1)

通过添加
来调整TabbedPage 就像这样:(注意,我为CurrentPageChanged添加了一个事件)

<?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"
        CurrentPageChanged="TabbedPage_CurrentPageChanged"            
        >

<TabbedPage.Children>
    <NavigationPage Title="asdfee">
        <x:Arguments>
            <layouts:MyNavigationPage Icon="myIcon"/>
        </x:Arguments>
    </NavigationPage>
</TabbedPage.Children>

您要导航到的页面应该是ContentPage。将标题添加到页面。

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

    <Label Text="asdfawwer"/>

</ContentPage>

答案 2 :(得分:0)

我不相信你可以在XAML中创建一个NavigationPage。我总是从代码中做到这一点:

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