我被困在尝试将控制模板重用于独立的ContentPage
以及...ContentPage
CarouselPage
主要问题是CarouselPage
不支持该ControlTemplate
属性。因此,我被迫ContentPage
在DataTemplate
. CarouselPage
这ContentPage
然后可以得到ControlTemplate
分配,但我遇到的问题BindingContext
是不是ViewModel
.
我还将尝试用代码解释问题:
我已经创建了如下所示的模板。
<!-- Loader view template -->
<ControlTemplate x:Key="LoaderViewTemplate">
<AbsoluteLayout Padding="0" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<!-- Content -->
<ContentPresenter AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All" />
<!-- Loader -->
<BoxView IsVisible="{TemplateBinding BindingContext.IsBusy}" BackgroundColor="Green" Opacity="0.5" AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All" />
<StackLayout IsVisible="{TemplateBinding BindingContext.IsBusy}" Padding="6" BackgroundColor="Gray" Orientation="Horizontal" AbsoluteLayout.LayoutBounds="0.5, 0.5, -1, -1" AbsoluteLayout.LayoutFlags="PositionProportional">
<ActivityIndicator Color="White" IsRunning="{TemplateBinding BindingContext.IsBusy}" VerticalOptions="Center" WidthRequest="20" HeightRequest="20" />
<Label TextColor="White" Text="Loading..." VerticalOptions="Center" />
</StackLayout>
</AbsoluteLayout>
</ControlTemplate>
该模板可以正常工作,ContentPage
如下所示。
<ContentPage ...
ControlTemplate="{StaticResource LoaderViewTemplate}">
<StackLayout HorizontalOptions="Center" VerticalOptions="Center">
...
</StackLayout>
</ContentPage>
但它在如下所示的情况下不起作用。CarouselPage
<CarouselPage ...
ItemsSource="{Binding Tournament.Rounds}">
<CarouselPage.ItemTemplate>
<DataTemplate>
<ContentPage ControlTemplate="{StaticResource LoaderViewTemplate}">
...
</ContentPage>
</DataTemplate>
</CarouselPage.ItemTemplate>
</CarouselPage>
BindingContext
中的变成CarouselPage
了TournamentRoundModel
从Tournament.Rounds
集合中。
有没有人知道我如何才能达到ViewModel
独立ContentPage
和CarouselPage
嵌套的根源ContentPage
?
亲切的问候,乔普·米德尔坎普