因此,我页面必须没有父例外。当我尝试从一个页面导航到另一个已包含在另一个选项卡中的页面时,会发生这种情况。在我将页面加载到TabbedPage本身之前,我将它们放在一个名为 pages 的列表中,这显然是TabbedPage从中获取子代的地方。我也试图让这个列表与我的导航按钮一起使用。但每当我尝试使用它们时,我都会得到异常。以下是我加载页面的方法:
private int pageNavCount = 0;
private list<ContentPage> pages = nwe List<ContentPage> (0);
public MainCPage ()
{
Create ();
Children.Add(pages[0]);
Children.Add(pages[1]);
Children.Add(pages[2]);
}
以下是我将页面放入列表的方式:
pages.Add (new ContentPage {
Title="Start Pagina",
BackgroundImage="@drawable/background.jpg",
Content = new StackLayout {
Padding = 50,
BackgroundColor = Color.Black,
Opacity = 0.75,
Children = {
//The controls and stuff
}
}
});
这就是我在导航按钮中使用页面列表的方式:
private void NavButtonNext_Clicked (object sender, EventArgs e)
{
pageNavCount++;
this.Navigation.PushAsync(pages[pageNavCount]);
}
private void NavButtonPrev_Clicked (object sender, EventArgs e)
{
pageNavCount--;
this.Navigation.PushAsync(ages[pageNavCount]);
}
当我尝试按下按钮时,我得到&#34; 页面必须没有父母&#34;例外。 而且我不想为每一页制作新的按钮!有人可以告诉我这里我做错了吗?
答案 0 :(得分:2)
如果您要导航到另一个已打开的标签页面,那么您应该执行以下操作:
// you will need a reference to your TabbedPage
pageNavCount--;
tabs.CurrentPage = pages[pageNavCount];
这个blog在以编程方式切换选项卡方面有很好的写作。
答案 1 :(得分:0)
尝试类似:
this.Navigation.PushAsync(new MainCPage(pageNavCount));
在MainCPage构造函数中:
public MainCPage (int index)
{
Create ();
Children.Add(pages[0]);
Children.Add(pages[1]);
Children.Add(pages[2]);
CurrentPage = Children[i];
}
它不是最好的架构,但至少你会了解它背后的想法。
答案 2 :(得分:0)
我通过将NavigationPage Parent属性设置为null来解决问题。我正在使用MasterDetailPage和MessagingCenter来切换App中的导航。
MessagingCenter.Subscribe<NavigationPage>(this, "Navigate", (pageItem) =>
{
pageItem.Parent = null; // solution
Detail = pageItem;
IsPresented = false;
});