如何更改导航栏标题,而不管标题标题

时间:2018-05-30 05:54:10

标签: c# xamarin.forms xamarin.ios

我将导航栏上的页面标题设置为

public Homework ()
{
   InitializeComponent ();
   Title = "Homework";     
}

此页面是标签页的子页面,其中标签已有标题" Tab1"。

现在,当我从 Tab1 打开Homework.cs页面时,上面的代码将标题标题更改为Homework和导航栏标题也会更改为" Homework"。我不想更改标题标题。

使用

的MyTabbed页面代码
   public class MyTabbedPage : TabbedPage
    {
        public MyTabbedPage()
        {
           this.CurrentPageChanged +=delegate
           {        
             this.Title = this.CurrentPage.Title;
           };     
        }
    }

查看一些方便的摘录

public App ()
{
    InitializeComponent();
    MainPage = new NavigationPage(new LoginPage());          
}

LoginContentPage按钮单击

btnLogin.Clicked +=async delegate {
 await Navigation.PushAsync(new ParentDashboard(), false);
};

包含标签的ParentDashboard

public partial class ParentDashboard : MyTabbedPage
{
    public ParentDashboard()
    {
        InitializeComponent();      
        Title="Home"; //upto here title working
    }
}

从现在开始,我点击了HomewPage,就像我在这个问题的开头看到的那样。那是行不通的。 我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

我猜你的项目的层次结构可能是这样的:

NavigationPage => TabbedPage =>儿童页面。

然后,每当儿童页面的标题发生变化时,TabbedPage的标题也会发生变化。即使我们为此子页面制作了自定义渲染器,也很难更改页面的navigationBar标题。因为NavigationCtroller的root viewController是你的标签页。

我建议您调整项目的层次结构,使每个子页面都包含导航页面,如:

enter image description here

通过这种方式,您可以设置导航页面的标题以调整标签项的标题,并通过设置Homework'来更改导航栏的标题。标题。

您可以参考我的代码来构建app()

// This is a TabbedPage
var tabbedPage = new MyTabbedPage();

var firstPage = new MainPage();
// The NavigationPage's Title will be shown on the tab, and firstPage's title can be shown on the navigation bar
tabbedPage.Children.Add(new NavigationPage(firstPage) { Title = "FirstPage" });

var homePage = new Homework();
tabbedPage.Children.Add(new NavigationPage(homePage) { Title = "SecondPage" });

MainPage = tabbedPage;

答案 1 :(得分:0)

回答这个问题已经很晚了,但是我花了一些时间在这个问题上,并希望向有相同目标的任何人分享我的解决方案:

  • 单击选项卡时,将TabbedPage的标题设置为子级的页面标题(例如“完整标题”)
  • 使用比孩子的整页标题短的标签标签(例如“标题”)
  • 避免使用另一层或导航堆栈(由陆陆空(MSFT的回答)推荐

解决方案

在内容页面的基类中,添加了LongTitle属性。这样可以使页面的标题更长或更短(=默认)。

假定childPage1的标签标签应比其原始标题短。因此,我将其Title属性更改为较短的版本(“标题”),并将LongTitle属性设置为较长的​​版本(“完整标题”)

我将页面与TabbedPage构造函数中的另一个子页面一起添加到TabbedPage中:

Children.Add(childPage1);
Children.Add(childPage2);

选项卡标签绑定到它们的Title属性,即较短的属性,即i。 e。对于childPage1,为“ Title”。这是预期的。

单击选项卡时,将触发CurrentPageChanged事件。我使用它来更新TabbedPage的标题,并将其设置为LongTitle(如果存在于子页面中)。

CurrentPageChanged += (s, e) => Title = (CurrentPage as BasePage).LongTitle ?? CurrentPage.Title;

BasePage应替换为页面的适当基类。