【问题标题】:Xamarin.Forms Adding Children Pages to TabbedPageXamarin.Forms 将子页面添加到 TabbedPage
【发布时间】:2017-04-15 05:23:49
【问题描述】:

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

我有三个标签:

支付、配置、维护

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

tabPage.Children.Remove(ConfigTab);

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

tabPage.Children.Add(ConfigTab);

但它添加在列表的末尾并且缺少导航标题:

我研究了使用插入方法,我可以在其中指定索引

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 方法然后重置导航堆栈,我仍然感兴趣。

【问题讨论】:

    标签: android xamarin.forms tabbedpage


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      下一个代码对我有用:

      tabPage.Children.Insert(1,ConfigTab);
      

      【讨论】:

      • 谢谢。我猜以前 Xamarin 表单中存在一个错误,导致 Insert 函数崩溃,但已修复。
      猜你喜欢
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2016-03-15
      • 2018-06-24
      • 1970-01-01
      • 2021-04-11
      • 2018-06-30
      相关资源
      最近更新 更多