Xamarin Forms: как сделать каждую страницу карусели другим цветом - PullRequest
0 голосов
/ 25 октября 2019

Я создал вид карусели, который содержит коллекцию слайдов. Каждый слайд содержит и изображение, сообщение и цвет. Он хранится в ObservableCollection. У меня есть три цвета в коллекции. Первый слайд / страница должен быть желтым, второй должен быть красным, а третий должен быть синим. У меня возникает проблема, когда приложение запускает все слайды синего цвета в карусели. Мне нужно, чтобы каждый слайд / страница имели разные цвета.

 Carousel.ItemsSource =   slides = new ObservableCollection<Slides>(new[]
            {
                new Slides("money", "Some Description", BackgroundColor = Color.Yellow),
                new Slides("money", "Some Description2", BackgroundColor = Color.Red),
                new Slides("money", "Some Description3",BackgroundColor = Color.Blue)});



<Control:CarouselViewControl x:Name="Carousel"
                             ShowIndicators="True"
                             BackgroundColor="{Binding Color}"
                             CurrentPageIndicatorTintColor="Black">
   <Control:CarouselViewControl.ItemTemplate>
       <DataTemplate>
      <Grid>
          <Grid.RowDefinitions>
              <RowDefinition Height="*"/>
              <RowDefinition Height="*"/>
          </Grid.RowDefinitions>
          <ContentView Grid.Row="0" Padding="60,30,60,0">
              <Image Source="{Binding Image}" Aspect="AspectFit"/>
          </ContentView>
          <ContentView Grid.Row="1" Padding="20,50,20,0">
              <Label Text="{Binding Message}" TextColor="black"
                     HorizontalOptions="CenterAndExpand"
                     FontSize="Large"/>

          </ContentView>

      </Grid>

       </DataTemplate>
   </Control:CarouselViewControl.ItemTemplate>
</Control:CarouselViewControl>

Я ожидаю, что каждая страница будет иметь разные цвета.

1 Ответ

0 голосов
/ 28 октября 2019

Вы связываете BackgroundColor для CarouselViewControl, который установит его для всего вида, а не для отдельных слайдов.

Кроме того, элементы, хранящиеся в ItemsSource, не представляют какие-либо представления в CarouselViewControl, а представляют собой объекты данных. Только потому, что объект в коллекции ItemsSource имеет значение BackgroundColor, BackgroundColor соответствующего представления в CarouselViewControl не устанавливается автоматически.

Чтобы установить фон страниц, которые выВам придется работать изнутри DataTemplate и связать свойство BackgroundColor Grid с соответствующим свойством Slide.

<DataTemplate>
  <Grid BackgroundColor="{Binding BackgroundColor}"> <!-- Bind the grids BackgroundColor to the one of the Slide -->
    <!-- the grids content -->
  </Grid>
</DataTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...