我卡試圖重用控件模板的獨立ContentPage
以及在CarouselPage
一個ContentPage
...Xamarin形式共享的ControlTemplate爲ContentPage和CarouselPage
的主要問題是,CarouselPage
不支持ControlTemplate
屬性。因此,我不得不在CarouselPage
的DataTemplate
中插入ContentPage
。這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
成爲從Tournament.Rounds
集合TournamentRoundModel
。
沒有任何一個對我怎麼能獨立ContentPage
和CarouselPage
嵌套ContentPage
內到達ViewModel
根的想法?
親切的問候, Jop的Middelkamp
這解決了我的問題!謝謝G. Sharada! –