xamlxamarincontroltemplateabsolutelayouttemplatebinding

TemplateBinding in xaml ControlTemplate is not working


Out of my ControlTemplate laying in App.xaml I try to get a boolean property from the used ViewModel to make elements (in this case an activityIndicator) visible in the Content xaml.

Property:

Private bool isLoading;
public bool IsLoading
{
   get => this.isLoading;
   set => this.SetProperty(ref this.isLoading, value);
}

Contentpage:

ControlTemplate="{StaticResource Template__Page_Scrollable}"

ControlTemplate (I will integrate the ActivityIndicator in the StackLayout, but first I only want to show the StackLayout itself by setting the backgroundcolour to Aqua):

    <ControlTemplate x:Key="Template__Page_Scrollable">
        <AbsoluteLayout x:Name="ActivityIndicator">
            <ScrollView Style="{StaticResource Page_Scrollable__ScrollContainer}" AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All">
                <ContentPresenter AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All"/>
            </ScrollView>
            <StackLayout AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All" 
                         IsEnabled="{TemplateBinding Parent.BindingContext.IsLoading}" 
                         IsVisible="{TemplateBinding Parent.BindingContext.IsLoading}" BackgroundColor="Aqua">
            </StackLayout>
        </AbsoluteLayout>
    </ControlTemplate>

Due to my research this should work by i get the message "Connot resolve symbol 'Parent'" Without 'Parent' I always get true as a result.

I've tried for example:


Solution

  • If you really have your ControlTemplate set on your ContentPage, e.g.:

    <ContentPage 
    ...
    ControlTemplate="{StaticResource Template__Page_Scrollable}">
    

    this is incorrect. Parent in the ControlTemplate refers to the parent view of the view that is hosting the control template. A ContentPage has no parent view.

    Instead, you need to set the control template on the ContentView in your ContentPage , e.g.:

    <ContentPage ...>
        <ContentView ControlTemplate="{StaticResource Template__Page_Scrollable}" >
           ...
        </ContentView>
    </ContentPage>