如何从Xamarin Forms中的子类访问ContentPage上的Title属性?

时间:2017-01-31 08:31:01

标签: c# xamarin.forms

我在XAML中有以下代码:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    xmlns:local="clr-namespace:AAA;assembly=AAA"
    x:Class="AAA.FavoritesPage">
   <ContentPage.Content>
      <StackLayout BackgroundColor="{Binding ThemeBackgroundColor}" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
         <local:FavoritesFrameRendererSubClass/>
      </StackLayout>
   </ContentPage.Content>
</ContentPage>

我希望能够更改我的子类C#代码的ContentPage中的Title OnBindingContextChanged属性,如下所示:

public partial class FavoritesFrameRendererSubClass : Frame
{
   protected override void OnBindingContextChanged()
   {
      // Dynamically change the ContentPage's title here
      Title = App.index + " of " + App.favoriteWords.Count;
   }
}

任何人都知道这是否可行?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:1)

虽然可接受的答案有效,但这是一个相当繁重的方法。面对此问题,而不是公开整个项目的公共静态方法,而是通过Parent属性进行投射和行走可以访问Title属性。

例如,假设您有一个可重复使用的ContentPage,并且每个实例必须动态更改其标题。此用例利用命令行管理程序,并将ContentPage的标题设置为弹出显示时显示的ShellContent的标题。

((TemplatedPage)this).Title = ((BaseShellItem)((TemplatedPage)this).Parent).Title;

如果面对更深的层次结构,请使用调试器找出必需的转换,并遍历Parent属性以获取所需的标题。

答案 1 :(得分:0)

您需要公开声明ContentPage的静态对象。

public static FavoritesPage FavoritesPageCS;
public FavoritesPage()
{
   FavoritesPageCS = this;
}

从您的子页面或任何其他页面,您可以使用FavoritesPage.Title

访问标题

希望这对你有用。