我的应用程序中的主页面是TabbedPage
我有三个标签:
付款,配置,维护
其中一个标签由设置控制以显示或不显示。如果将其更改为false,请执行以下操作删除选项卡:
tabPage.Children.Remove(ConfigTab);
此删除工作正常。如果我重新打开标签,我可以使用以下代码添加标签:
tabPage.Children.Add(ConfigTab);
但它添加在列表的末尾并且导航标题丢失了:
我查看了使用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方法然后重置导航堆栈,我仍然感兴趣。
答案 0 :(得分:1)
我在插入儿童时遇到了同样的事情。您的解决方案似乎是隐藏和显示页面的唯一选项。我建议将页面分配给变量,这样每次隐藏/显示ConfigPage时都不必遍历子项。根据名称,我假设页面彼此不同。
在类似页面的情况下,可以在DataTemplate的帮助下使用ItemsSource。将ItemsSource绑定到ObservableCollection时隐藏和显示页面只需要修改该集合。有关这方面的更多信息,请访问:
答案 1 :(得分:1)
下一个代码对我有用:
tabPage.Children.Insert(1,ConfigTab);