以下代码可以正常使用:
<?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 进行第二种方法,则可行。
我做错了什么或者我应该填写错误报告吗?
有什么想法吗?
由于
答案 0 :(得分:2)
@Dpedrinha
这是可能的。
Xamarin.Forms:如何将NavigationPage XAML类添加到另一个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());