Можно ли отобразить более 1 элемента на карусели? - PullRequest
0 голосов
/ 03 июня 2019

Я хотел бы отобразить 3 элемента одновременно в виде карусели на формах xamarin.

Я использую пользовательский CarouselView, который можно найти здесь: https://github.com/AndreiMisiukevich/CardView. Тем не менее, он отображает только 1 элемент на просмотр.

Вот пример того, что я сделал.

  public class Example : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;


        private string _titulo;
        public string Titulo
        {
            get
            {
                return _titulo;
            }
            set
            {
                _titulo = value;
                OnPropertyChanged(nameof(Titulo));
            }
        }

        private Color _cor;
        public Color Cor
        {
            get
            {
                return _cor;
            }
            set
            {
                _cor = value;
                OnPropertyChanged(nameof(Cor));
            }
        }

        public Example(string a, Color b)
        {
            Titulo = a;
            Cor = b;
        }

        #region INotifyPropertyChanged Implementation
        void OnPropertyChanged([CallerMemberName] string propertyName = "")
        {
            if (PropertyChanged == null)
                return;

            PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
        #endregion
    }

    public class TesteViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private ObservableCollection<Example> _fonte;
        public ObservableCollection<Example> Fonte
        {
            get
            {
                return _fonte;
            }
            set
            {
                _fonte = value;
                OnPropertyChanged(nameof(Fonte));
            }
        }

        public TesteViewModel()
        {
            Fonte = new ObservableCollection<Example>()
            {
                new Example("Gratidão", Color.Red),
                new Example("Vitórias", Color.Green),
                new Example("Objectivos do ano", Color.Blue)
            };
        }

        #region INotifyPropertyChanged Implementation
        void OnPropertyChanged([CallerMemberName] string propertyName = "")
        {
            if (PropertyChanged == null)
                return;

            PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
        #endregion

    }

    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class teste : ContentPage
    {

        public teste()
        {
            BindingContext = new TesteViewModel();
            InitializeComponent();
            carrouusel.SetBinding(CardsView.ItemsSourceProperty, nameof(TesteViewModel.Fonte));
        }

    }

    <ContentPage.Content>
        <StackLayout>
            <card:CarouselView x:Name="carrouusel" VerticalOptions="Start">
                <card:CarouselView.ItemTemplate>
                    <DataTemplate>
                        <ContentView>
                            <Frame HeightRequest="100" WidthRequest="200" Padding="0" HasShadow="false" IsClippedToBounds="true" CornerRadius="0" BackgroundColor="{Binding Cor}">
                                <Label Text="{Binding Titulo}" TextColor="Black"/>
                            </Frame>
                        </ContentView>
                    </DataTemplate>
                </card:CarouselView.ItemTemplate>
            </card:CarouselView>
        </StackLayout>
    </ContentPage.Content>

Я хочу отображать 3 элемента для каждого просмотра рядом. Как показано на этом изображении: https://ibb.co/nzphmFw

Ответы [ 2 ]

2 голосов
/ 04 июня 2019

Если вы хотите отобразить 3 элемента для каждого вида рядом, вы можете настроить contentView из card:CarouselView, теперь вы можете поместить только один Frame в него, вы можете изменить его на:

<cards:CarouselView.ItemTemplate>
    <DataTemplate>
        <ContentView>

            <StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" HeightRequest="100" WidthRequest="300">

                <Frame HeightRequest="100" WidthRequest="100" Padding="0" HasShadow="false" IsClippedToBounds="true" CornerRadius="0" BackgroundColor="Red">
                    <Label Text="Titulo" TextColor="Black"/>
                </Frame>

                <Frame HeightRequest="100" WidthRequest="100" Padding="0" HasShadow="false" IsClippedToBounds="true" CornerRadius="0" BackgroundColor="Green">
                    <Label Text=" Titulo" TextColor="Black"/>
                </Frame>

                <Frame HeightRequest="100" WidthRequest="100" Padding="0" HasShadow="false" IsClippedToBounds="true" CornerRadius="0" BackgroundColor="Yellow">
                    <Label Text="Titulo" TextColor="Black"/>
                </Frame>

            </StackLayout>

        </ContentView>
    </DataTemplate>
</cards:CarouselView.ItemTemplate>

Это будет отображать 3 метки каждый вид.Дайте мне знать, если это работает.

Обновление:

Я отредактировал код CoverFlowView, и я думаю, что это почти успех.Вы можете проверить мой образец здесь: cards-View-xamarin.forms

Я изменил:

PositionShiftValue="250" 

и передам widthrequest и heightRequestизображение.

1 голос
/ 06 июня 2019

HorizontalListView, который я создал здесь, обрабатывает этот сценарий:

https://github.com/roubachof/Sharpnado.Presentation.Forms#horizontallistview-and-grid-mode

Вам просто нужно установить ColumnCount на 3 и привязать к началу или центру, как вам нравится:

<renderedViews:HorizontalListView Grid.Row="3"
                                  Margin="-16,8"
                                  CollectionPadding="8,8"
                                  ItemSpacing="8"
                                  ColumnCount="3"
                                  ItemsSource="{Binding SillyPeopleLoader.Result}"
                                  SnapStyle="Start">

Вы также можете найти пост в блоге здесь:

https://www.sharpnado.com/carousel-layout-happy-new-horizontallistview/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...