Xamarin.Forms 将 Children 个页面添加到 TabbedPage
Xamarin.Forms Adding Children Pages to TabbedPage
我的应用程序主页是一个 TabbedPage
我有三个标签:
支付、配置、维护
其中一个选项卡由设置控制是否显示。当它更改为 false 时,我通过执行以下操作删除选项卡:
tabPage.Children.Remove(ConfigTab);
此删除工作正常。如果我重新打开标签,我可以使用以下代码添加标签:
tabPage.Children.Add(ConfigTab);
但是它被添加到列表的末尾并且缺少导航 header:
我查看了使用 Insert 方法,我可以在其中指定索引
tabPage.Children.Insert(1,ConfigTab);
但这会使应用程序崩溃并显示以下消息:
Unhandled Exception: Java.Lang.IndexOutOfBoundsException: Invalid
index 2, size is 2
如果我当时检查 children 它已将页面添加到正确的索引
关于如何向 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 方法然后重置导航堆栈,我仍然很感兴趣。
我在使用 Insert to the Children 时遇到了同样的事情。您的解决方案似乎是隐藏和显示页面的唯一选择。我建议将页面分配给变量,这样您就不必在每次访问 hiding/showing ConfigPage 时都循环遍历子项。根据名称,我假设这些页面彼此不同。
在类似页面的情况下,ItemsSource 可以在 DataTemplate 的帮助下使用。将 ItemsSource 绑定到 ObservableCollection 时,隐藏和显示页面只需要修改该集合。可以在此处找到更多相关信息:
下一个代码适合我:
tabPage.Children.Insert(1,ConfigTab);
我的应用程序主页是一个 TabbedPage
我有三个标签:
支付、配置、维护
其中一个选项卡由设置控制是否显示。当它更改为 false 时,我通过执行以下操作删除选项卡:
tabPage.Children.Remove(ConfigTab);
此删除工作正常。如果我重新打开标签,我可以使用以下代码添加标签:
tabPage.Children.Add(ConfigTab);
但是它被添加到列表的末尾并且缺少导航 header:
我查看了使用 Insert 方法,我可以在其中指定索引
tabPage.Children.Insert(1,ConfigTab);
但这会使应用程序崩溃并显示以下消息:
Unhandled Exception: Java.Lang.IndexOutOfBoundsException: Invalid index 2, size is 2
如果我当时检查 children 它已将页面添加到正确的索引
关于如何向 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 方法然后重置导航堆栈,我仍然很感兴趣。
我在使用 Insert to the Children 时遇到了同样的事情。您的解决方案似乎是隐藏和显示页面的唯一选择。我建议将页面分配给变量,这样您就不必在每次访问 hiding/showing ConfigPage 时都循环遍历子项。根据名称,我假设这些页面彼此不同。
在类似页面的情况下,ItemsSource 可以在 DataTemplate 的帮助下使用。将 ItemsSource 绑定到 ObservableCollection 时,隐藏和显示页面只需要修改该集合。可以在此处找到更多相关信息:
下一个代码适合我:
tabPage.Children.Insert(1,ConfigTab);