如何在Xamarin Carousel中将所有项目模板数据设置到单个视图中

问题描述 投票:3回答:1

我已尝试将itemtemplate中的所有项目制作为单个视图,如下图所示,如何通过使用Xamarin CarouselView实现此目的,我使用的是这样的方式

        carousel = new CarouselView();
            carousel.BindingContext = this;
            carousel.ItemTemplate = itemTemplate;
            carousel.SetBinding(CarouselView.ItemsSourceProperty, new Binding(nameof(this.Items), mode: BindingMode.OneWay));
   LinearItemsLayout linearItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Horizontal);
            linearItemsLayout.SnapPointsAlignment = SnapPointsAlignment.Start;
            linearItemsLayout.SnapPointsType = SnapPointsType.Mandatory;
           carousel.ItemsLayout = linearItemsLayout;


 this.Children.Add(carousel,0,1);

Expected UI

But the Actual image is

xamarin xamarin.forms carousel itemtemplate
1个回答
1
投票

最简单的方法是使用Horizo​​ntal CollectionView

CollectionView可以通过将其ItemsLayout属性设置为Horizo​​ntalList来在水平列表中显示其项目:

[当您检查文档时,它提供了类似的示例

<CollectionView ItemsSource="{Binding Monkeys}"
            ItemsLayout="HorizontalList">
<CollectionView.ItemTemplate>
    <DataTemplate>
        <Grid Padding="10">
            <Grid.RowDefinitions>
                <RowDefinition Height="35" />
                <RowDefinition Height="35" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="70" />
                <ColumnDefinition Width="140" />
            </Grid.ColumnDefinitions>
            <Image Grid.RowSpan="2"
                   Source="{Binding ImageUrl}"
                   Aspect="AspectFill"
                   HeightRequest="60"
                   WidthRequest="60" />
            <Label Grid.Column="1"
                   Text="{Binding Name}"
                   FontAttributes="Bold"
                   LineBreakMode="TailTruncation" />
            <Label Grid.Row="1"
                   Grid.Column="1"
                   Text="{Binding Location}"
                   LineBreakMode="TailTruncation"
                   FontAttributes="Italic"
                   VerticalOptions="End" />
        </Grid>
    </DataTemplate>
</CollectionView.ItemTemplate>

或者,也可以通过将ItemsLayout属性设置为LinearItemsLayout对象,将Horizo​​ntal ItemsLayoutOrientation枚举成员指定为Orientation属性值来完成此布局:

<CollectionView ItemsSource="{Binding Monkeys}">
<CollectionView.ItemsLayout>
    <LinearItemsLayout Orientation="Horizontal" />
</CollectionView.ItemsLayout>
...
</CollectionView>

这将产生一个单行列表,当添加新项目时,该行列表会水平增长:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.