0

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

我有三个标签:

支付、配置、维护

其中一个选项卡由设置控制以显示或不显示。当它更改为 false 时,我通过执行以下操作删除选项卡:

tabPage.Children.Remove(ConfigTab);

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

tabPage.Children.Add(ConfigTab);

但是它添加在列表的末尾,并且缺少 Navigation 标头:

在此处输入图像描述

我查看了使用可以在其中指定索引的 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 方法然后重置导航堆栈,我仍然感兴趣。

4

2 回答 2

1

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

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

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

于 2017-04-15T18:17:55.167 回答
1

下一个代码对我有用:

tabPage.Children.Insert(1,ConfigTab);
于 2018-09-25T23:39:41.213 回答