Как установить все данные шаблона элемента в одном представлении в Xamarin Carousel - PullRequest
3 голосов
/ 04 февраля 2020

Я попытался превратить все элементы в шаблон элемента в один вид, как показано на рисунке ниже, как этого добиться с помощью 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);

Ожидаемый пользовательский интерфейс

But the Actual image is

1 Ответ

1 голос
/ 04 февраля 2020

Самый простой способ сделать что-то подобное - это использовать Horizontal CollectionView

CollectionView может отображать свои элементы в горизонтальном списке, задав свойству ItemsLayout значение HorizontalList:

Когда вы проверяете документы, он дает похожий пример

<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, указав Horizontal ItemsLayoutOrientation элемент перечисления в качестве значения свойства Orientation:

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

В результате получается список из одной строки, который увеличивается по мере добавления новых элементов:

enter image description here

...