Xamarin.Forms将子页面添加到TabbedPage

时间:2017-04-15 05:23:50

标签: android xamarin.forms tabbedpage

我的应用程序中的主页面是TabbedPage

我有三个标签:

付款,配置,维护

其中一个标签由设置控制以显示或不显示。如果将其更改为false,请执行以下操作删除选项卡:

tabPage.Children.Remove(ConfigTab);

此删除工作正常。如果我重新打开标签,我可以使用以下代码添加标签:

tabPage.Children.Add(ConfigTab);

但它添加在列表的末尾并且导航标题丢失了:

enter image description here

我查看了使用Insert方法,我可以在其中分类索引

tabPage.Children.Insert(1,ConfigTab);

但是这会使应用程序崩溃,并显示以下消息:

  

未处理的异常:Java.Lang.IndexOutOfBoundsException:无效   索引2,大小为2

如果我在那时检查孩子,它已在正确的索引处添加了页面

关于如何动态地将新页面插入TabbedPage的任何建议?并保留导航?

更新

我现在已经设法通过执行以下操作来实现它:

var paymentPage = tabPage.Children.FirstOrDefault(p=> p.ClassId == "PaymentNavPage");
var configPage = GetConfigPage();
var maintenancePage = tabPage.Children.FirstOrDefault(p => p.ClassId == "MaintaintNavPage");

// Clear old Tabgs
tabPage.Children.Clear();

// Put pages back
tabPage.Children.Add(paymentPage);
tabPage.Children.Add(configPage);
tabPage.Children.Add(maintenancePage);              

如果有更好的方法可以使用Insert方法然后重置导航堆栈,我仍然感兴趣。

2 个答案:

答案 0 :(得分:1)

我在插入儿童时遇到了同样的事情。您的解决方案似乎是隐藏和显示页面的唯一选项。我建议将页面分配给变量,这样每次隐藏/显示ConfigPage时都不必遍历子项。根据名称,我假设页面彼此不同。

在类似页面的情况下,可以在DataTemplate的帮助下使用ItemsSource。将ItemsSource绑定到ObservableCollection时隐藏和显示页面只需要修改该集合。有关这方面的更多信息,请访问:

https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/navigation/tabbed-page/#Populating_a_TabbedPage_with_a_Template

答案 1 :(得分:1)

下一个代码对我有用:

tabPage.Children.Insert(1,ConfigTab);