首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每个幻灯片的不同模板的CarouselView ( Xamarin窗体)

每个幻灯片的不同模板的CarouselView ( Xamarin窗体)
EN

Stack Overflow用户
提问于 2017-01-16 08:41:16
回答 1查看 6.6K关注 0票数 4

我需要在每个幻灯片都有一个特定模板的情况下,用Xamarin表单制作一个CarouselView。目前,我已这样做:

XAML

代码语言:javascript
复制
xmlns:control="clr-namespace:Xamarin.Forms;assembly=Xamarin.Forms.CarouselView"
.......

 <ContentView HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
          <control:CarouselView x:Name="carouselView">
            <control:CarouselView.ItemTemplate>
              <DataTemplate>
                <Label Text="{Binding Testo}" />
              </DataTemplate>
            </control:CarouselView.ItemTemplate>
          </control:CarouselView>
        </ContentView>

CODEBEHIND

代码语言:javascript
复制
List<CustomCell> myCarousel = new List<CustomCell>();
myCarousel.Add(new CustomCell { Testo = "ciao" });
myCarousel.Add(new CustomCell { Testo = "ciao due" });

carouselView.ItemsSource = myCarousel;

CustomCell

代码语言:javascript
复制
public class CustomCell
{
    public string Testo { get; set; }
}

所有这些都奏效了,我的问题是,对于每一张幻灯片,我都会有一个不同的模板,例如,每一张幻灯片都有不同的网格,这是因为我必须以不同的图形方式显示数据。你能推荐一个解决方案吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-01-18 10:30:42

您可以使用数据模板选择器自定义CarouselView中不同项的外观。一个简单的例子:

MyDataTemplateSelector.cs

代码语言:javascript
复制
public class MyDataTemplateSelector : DataTemplateSelector
{
    public DataTemplate SimpleTemplate { get; set; }
    public DataTemplate ComplexTemplate { get; set; }

    public MyDataTemplateSelector()
    {
        SimpleTemplate = new DataTemplate(typeof(SimpleView));
        ComplexTemplate = new DataTemplate(typeof(ComplexView));
    }

    protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
    {
        CustomCell cell = (CustomCell)item;

        if (cell.Testo.Length > 5) {
            return ComplexTemplate;
        } else {
            return SimpleTemplate;
        }
    }
}

SimpleView.xaml

代码语言:javascript
复制
<ContentView>
    <StackLayout BackgroundColor="Red">
      <Label Text="{Binding Testo}" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand" />
    </StackLayout>
</ContentView>

ComplexView.xaml

代码语言:javascript
复制
<ContentView>
    <StackLayout BackgroundColor="Yellow" >
      <Label Text="{Binding Testo}" VerticalOptions="CenterAndExpand" HorizontalOptions="Center" />
      <Label Text="I lied about this being complex" />
    </StackLayout>
</ContentView>

在您的CarouselView所在的页面中:

代码语言:javascript
复制
<ContentPage.Resources>
  <ResourceDictionary>
    <local:MyDataTemplateSelector x:Key="templateSelector"></local:MyDataTemplateSelector>
  </ResourceDictionary>
</ContentPage.Resources>

....

<control:CarouselView x:Name="carouselView" ItemTemplate="{StaticResource templateSelector}" />
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41672353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档