xaml ControlTemplate中的TemplateBinding无法正常运行

时间:2018-10-18 14:41:54

标签: xaml xamarin controltemplate absolutelayout templatebinding

在我放置在App.xaml中的ControlTemplate中,我尝试从使用的ViewModel中获取一个布尔属性,以使元素(在本例中为activityIndi​​cator)在Content xaml中可见。

属性:

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

内容页:

ControlTemplate="{StaticResource Template__Page_Scrollable}"

ControlTemplate(我将把ActivityIndi​​cator集成到StackLayout中,但是首先我只想通过将backgroundcolour设置为Aqua来显示StackLayout本身):

    <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>

由于我的研究,这应该可以通过以下方式工作:我收到消息“不解析符号“父母”” 没有“父母”,我总是会成真。

我尝试过例如:

  • 按常规设置BindingContext
  • IsEnabled =“ {TemplateBinding BindingContext.IsLoading}”
  • IsEnabled =“ {TemplateBinding IsLoading}”
  • IsEnabled =“ {Binding IsLoading}”

1 个答案:

答案 0 :(得分:0)

如果您确实在ControlTemplate上设置了ContentPage,例如:

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

这是不正确的。 Parent中的ControlTemplate表示托管控件模板的视图的父视图。 ContentPage没有父视图。

相反,您需要在ContentPage的ContentView上设置控件模板,例如:

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