public ObservableCodeCollectionViewGallery(ItemsLayoutOrientation orientation = ItemsLayoutOrientation.Vertical, bool grid = true, int initialItems = 1000, bool addItemsWithTimer = false) { var layout = new Grid { RowDefinitions = new RowDefinitionCollection { new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Star } } }; IItemsLayout itemsLayout = grid ? new GridItemsLayout(3, orientation) : new ListItemsLayout(orientation) as IItemsLayout; var itemTemplate = ExampleTemplates.PhotoTemplate(); var collectionView = new CollectionView { ItemsLayout = itemsLayout, ItemTemplate = itemTemplate, AutomationId = "collectionview", Header = "This is the header" }; var generator = new ItemsSourceGenerator(collectionView, initialItems, ItemsSourceType.ObservableCollection); var remover = new ItemRemover(collectionView); var adder = new ItemAdder(collectionView); var replacer = new ItemReplacer(collectionView); var mover = new ItemMover(collectionView); var inserter = new ItemInserter(collectionView); layout.Children.Add(generator); layout.Children.Add(remover); Grid.SetRow(remover, 1); layout.Children.Add(adder); Grid.SetRow(adder, 2); layout.Children.Add(replacer); Grid.SetRow(replacer, 3); layout.Children.Add(mover); Grid.SetRow(mover, 4); layout.Children.Add(inserter); Grid.SetRow(inserter, 5); layout.Children.Add(collectionView); Grid.SetRow(collectionView, 6); Content = layout; if (addItemsWithTimer) { generator.GenerateEmptyObservableCollectionAndAddItemsEverySecond(); } else { generator.GenerateItems(); } }
public CarouselCodeGallery(ItemsLayoutOrientation orientation) { On <iOS>().SetLargeTitleDisplay(LargeTitleDisplayMode.Never); _scrollInfoLabel.MaxLines = 1; _scrollInfoLabel.LineBreakMode = LineBreakMode.TailTruncation; _orientation = orientation; Title = $"CarouselView (Code, {orientation})"; var nItems = 5; var layout = new Grid { RowDefinitions = new RowDefinitionCollection { new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Star } } }; var itemsLayout = new LinearItemsLayout(orientation) { SnapPointsType = SnapPointsType.MandatorySingle, SnapPointsAlignment = SnapPointsAlignment.Center }; var itemTemplate = ExampleTemplates.CarouselTemplate(); var carouselView = new CarouselView { ItemsLayout = itemsLayout, ItemTemplate = itemTemplate, Position = 2, //NumberOfSideItems = 1, Margin = new Thickness(0, 10, 0, 40), BackgroundColor = Color.LightGray, AutomationId = "TheCarouselView" }; if (orientation == ItemsLayoutOrientation.Horizontal) { carouselView.PeekAreaInsets = new Thickness(30, 0, 30, 0); } else { carouselView.PeekAreaInsets = new Thickness(0, 30, 0, 30); } carouselView.Scrolled += CarouselView_Scrolled; layout.Children.Add(carouselView); StackLayout stacklayoutInfo = GetReadOnlyInfo(carouselView); var generator = new ItemsSourceGenerator(carouselView, initialItems: nItems, itemsSourceType: ItemsSourceType.ObservableCollection); layout.Children.Add(generator); var positionControl = new PositionControl(carouselView, nItems); layout.Children.Add(positionControl); var spacingModifier = new SpacingModifier(carouselView.ItemsLayout, "Update Spacing"); layout.Children.Add(spacingModifier); layout.Children.Add(stacklayoutInfo); var stckPeek = new StackLayout { Orientation = StackOrientation.Horizontal }; stckPeek.Children.Add(new Label { Text = "Peek" }); var padi = new Slider { Maximum = 100, Minimum = 0, Value = 30, WidthRequest = 100, BackgroundColor = Color.Pink }; padi.ValueChanged += (s, e) => { var peek = padi.Value; if (orientation == ItemsLayoutOrientation.Horizontal) { carouselView.PeekAreaInsets = new Thickness(peek, 0, peek, 0); } else { carouselView.PeekAreaInsets = new Thickness(0, peek, 0, peek); } }; stckPeek.Children.Add(padi); stacklayoutInfo.Children.Add(stckPeek); stacklayoutInfo.Children.Add(_scrollInfoLabel); Grid.SetRow(positionControl, 1); Grid.SetRow(stacklayoutInfo, 2); Grid.SetRow(spacingModifier, 3); Grid.SetRow(carouselView, 4); Content = layout; generator.CollectionChanged += (sender, e) => { positionControl.UpdatePositionCount(generator.Count); }; generator.GenerateItems(); }
public CarouselCodeGallery(ItemsLayoutOrientation orientation = ItemsLayoutOrientation.Horizontal) { //On<iOS>().SetLargeTitleDisplay(LargeTitleDisplayMode.Never); _scrollInfoLabel.MaxLines = 1; _scrollInfoLabel.LineBreakMode = LineBreakMode.TailTruncation; _orientation = orientation; Title = $"CarouselView (Code, {orientation})"; var nItems = 5; var layout = new Grid { RowDefinitions = new RowDefinitionCollection { new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Star } } }; var itemsLayout = new LinearItemsLayout(orientation) { SnapPointsType = SnapPointsType.MandatorySingle, SnapPointsAlignment = SnapPointsAlignment.Center }; var itemTemplate = ExampleTemplates.CarouselTemplate(); var carouselView = new CarouselView { ItemsLayout = itemsLayout, ItemTemplate = itemTemplate, Margin = new Thickness(0, 10, 0, 10), BackgroundColor = Colors.Red, AutomationId = "TheCarouselView", //Loop = false }; if (orientation == ItemsLayoutOrientation.Horizontal) { carouselView.PeekAreaInsets = new Thickness(30, 0, 30, 0); } else { carouselView.PeekAreaInsets = new Thickness(0, 30, 0, 30); } carouselView.Scrolled += CarouselViewScrolled; StackLayout StackLayoutInfo = GetReadOnlyInfo(carouselView); var generator = new ItemsSourceGenerator(carouselView, initialItems: nItems, itemsSourceType: ItemsSourceType.ObservableCollection); var positionControl = new PositionControl(carouselView, nItems); var spacingModifier = new SpacingModifier(carouselView.ItemsLayout, "Update Spacing"); var stckPeek = new StackLayout { Orientation = StackOrientation.Horizontal }; stckPeek.Children.Add(new Label { Text = "Peek" }); var padi = new Microsoft.Maui.Controls.Slider { Maximum = 100, Minimum = 0, Value = 30, WidthRequest = 100, BackgroundColor = Colors.Pink }; padi.ValueChanged += (s, e) => { var peek = padi.Value; if (orientation == ItemsLayoutOrientation.Horizontal) { carouselView.PeekAreaInsets = new Thickness(peek, 0, peek, 0); } else { carouselView.PeekAreaInsets = new Thickness(0, peek, 0, peek); } }; stckPeek.Children.Add(padi); var content = new Grid(); content.Children.Add(carouselView); #if DEBUG // Uncomment this line to add a helper to visualize the center of each element. //content.Children.Add(CreateDebuggerLines()); #endif layout.Children.Add(generator); layout.Children.Add(positionControl); layout.Children.Add(StackLayoutInfo); layout.Children.Add(stckPeek); layout.Children.Add(spacingModifier); layout.Children.Add(_scrollInfoLabel); layout.Children.Add(content); Grid.SetRow(positionControl, 1); Grid.SetRow(StackLayoutInfo, 2); Grid.SetRow(stckPeek, 3); Grid.SetRow(spacingModifier, 4); Grid.SetRow(_scrollInfoLabel, 5); Grid.SetRow(content, 6); Content = layout; generator.CollectionChanged += (sender, e) => { positionControl.UpdatePositionCount(generator.Count); }; generator.GenerateItems(); positionControl.UpdatePosition(1); }
public ObservableCodeCollectionViewGallery(ItemsLayoutOrientation orientation = ItemsLayoutOrientation.Vertical, bool grid = true) { var layout = new Grid { RowDefinitions = new RowDefinitionCollection { new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Star } } }; IItemsLayout itemsLayout = grid ? new GridItemsLayout(3, orientation) : new ListItemsLayout(orientation) as IItemsLayout; var itemTemplate = ExampleTemplates.PhotoTemplate(); var collectionView = new CollectionView { ItemsLayout = itemsLayout, ItemTemplate = itemTemplate }; var generator = new ItemsSourceGenerator(collectionView); var remover = new ItemRemover(collectionView); var adder = new ItemAdder(collectionView); var replacer = new ItemReplacer(collectionView); var mover = new ItemMover(collectionView); layout.Children.Add(generator); layout.Children.Add(remover); Grid.SetRow(remover, 1); layout.Children.Add(adder); Grid.SetRow(adder, 2); layout.Children.Add(replacer); Grid.SetRow(replacer, 3); layout.Children.Add(mover); Grid.SetRow(mover, 4); layout.Children.Add(collectionView); Grid.SetRow(collectionView, 5); Content = layout; generator.GenerateObservableCollection(); }
public SnapPointsCodeGallery(ItemsLayout itemsLayout) { Title = $"Snap Points (Code, {itemsLayout})"; var layout = new Grid { RowDefinitions = new RowDefinitionCollection { new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Star } } }; itemsLayout.SnapPointsAlignment = SnapPointsAlignment.Start; itemsLayout.SnapPointsType = SnapPointsType.None; var itemTemplate = ExampleTemplates.SnapPointsTemplate(); var collectionView = new CollectionView { ItemsLayout = itemsLayout, ItemTemplate = itemTemplate, }; var generator = new ItemsSourceGenerator(collectionView, initialItems: 50); var snapPointsTypeSelector = new EnumSelector <SnapPointsType>(() => itemsLayout.SnapPointsType, type => itemsLayout.SnapPointsType = type); var snapPointsAlignmentSelector = new EnumSelector <SnapPointsAlignment>(() => itemsLayout.SnapPointsAlignment, type => itemsLayout.SnapPointsAlignment = type); var flowDirectionSelector = new EnumSelector <FlowDirection>(() => layout.FlowDirection, type => layout.FlowDirection = type); layout.Children.Add(generator); layout.Children.Add(snapPointsTypeSelector); layout.Children.Add(snapPointsAlignmentSelector); layout.Children.Add(flowDirectionSelector); layout.Children.Add(collectionView); Grid.SetRow(snapPointsTypeSelector, 1); Grid.SetRow(snapPointsAlignmentSelector, 2); Grid.SetRow(flowDirectionSelector, 3); Grid.SetRow(collectionView, 4); Content = layout; generator.GenerateItems(); }
public IndicatorCodeGallery() { Title = "IndicatorView Gallery"; On <iOS>().SetLargeTitleDisplay(LargeTitleDisplayMode.Never); var nItems = 10; var layout = new Grid { RowDefinitions = new RowDefinitionCollection { new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Star }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto } } }; var itemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Horizontal) { SnapPointsType = SnapPointsType.MandatorySingle, SnapPointsAlignment = SnapPointsAlignment.Center }; var itemTemplate = ExampleTemplates.CarouselTemplate(); _carouselView = new CarouselView { ItemsLayout = itemsLayout, ItemTemplate = itemTemplate, BackgroundColor = Color.LightGray, AutomationId = "TheCarouselView" }; layout.Children.Add(_carouselView); var generator = new ItemsSourceGenerator(_carouselView, nItems, ItemsSourceType.ObservableCollection); layout.Children.Add(generator); generator.GenerateItems(); _carouselView.PropertyChanged += CarouselViewPropertyChanged; (_carouselView.ItemsSource as ObservableCollection <CollectionViewGalleryTestItem>).CollectionChanged += IndicatorCodeGalleryCollectionChanged; var indicatorView = new IndicatorView { HorizontalOptions = LayoutOptions.Center, Margin = new Thickness(12, 6, 12, 12), IndicatorColor = Color.Gray, SelectedIndicatorColor = Color.Black, IndicatorsShape = IndicatorShape.Square, AutomationId = "TheIndicatorView", Count = 5, }; _carouselView.IndicatorView = indicatorView; layout.Children.Add(indicatorView); var stckColors = new StackLayout { Orientation = StackOrientation.Horizontal }; stckColors.Children.Add(new Label { VerticalOptions = LayoutOptions.Center, Text = "IndicatorColor" }); var colors = new List <string> { "Black", "Blue", "Red" }; var colorsPicker = new Picker { ItemsSource = colors, WidthRequest = 150 }; colorsPicker.SelectedIndex = 0; colorsPicker.SelectedIndexChanged += (s, e) => { var selectedIndex = colorsPicker.SelectedIndex; switch (selectedIndex) { case 0: indicatorView.IndicatorColor = Color.Black; break; case 1: indicatorView.IndicatorColor = Color.Blue; break; case 2: indicatorView.IndicatorColor = Color.Red; break; } }; stckColors.Children.Add(colorsPicker); layout.Children.Add(stckColors); var stckTemplate = new StackLayout { Orientation = StackOrientation.Horizontal }; stckTemplate.Children.Add(new Label { VerticalOptions = LayoutOptions.Center, Text = "IndicatorTemplate" }); var templates = new List <string> { "Circle", "Square", "Template" }; var templatePicker = new Picker { ItemsSource = templates, WidthRequest = 150, TextColor = Color.Black }; templatePicker.SelectedIndexChanged += (s, e) => { var selectedIndex = templatePicker.SelectedIndex; switch (selectedIndex) { case 0: indicatorView.IndicatorTemplate = null; indicatorView.IndicatorsShape = IndicatorShape.Circle; break; case 1: indicatorView.IndicatorTemplate = null; indicatorView.IndicatorsShape = IndicatorShape.Square; break; case 2: indicatorView.IndicatorTemplate = ExampleTemplates.IndicatorTemplate(); break; } }; templatePicker.SelectedIndex = 0; stckTemplate.Children.Add(templatePicker); layout.Children.Add(stckTemplate); var stckSize = new StackLayout { Orientation = StackOrientation.Horizontal }; stckSize.Children.Add(new Label { VerticalOptions = LayoutOptions.Center, Text = "Indicator Size" }); //indicatorView.IndicatorSize = 25; var sizeSlider = new Slider { WidthRequest = 150, Value = indicatorView.IndicatorSize, Maximum = 50, }; sizeSlider.ValueChanged += (s, e) => { var indicatorSize = sizeSlider.Value; indicatorView.IndicatorSize = indicatorSize; }; stckSize.Children.Add(sizeSlider); layout.Children.Add(stckSize); Grid.SetRow(generator, 0); Grid.SetRow(stckColors, 1); Grid.SetRow(stckTemplate, 2); Grid.SetRow(stckSize, 3); Grid.SetRow(_carouselView, 4); Grid.SetRow(indicatorView, 6); var layoutBtn = new StackLayout { Orientation = StackOrientation.Horizontal, HorizontalOptions = LayoutOptions.Center, }; var btnRemove = new Button { Text = "DEL First", FontSize = 8, AutomationId = "btnRemoveFirst", BackgroundColor = Color.LightGray, Padding = new Thickness(5), Command = new Command(() => { var items = (_carouselView.ItemsSource as ObservableCollection <CollectionViewGalleryTestItem>); items.Remove(items[0]); }) }; _btnPrev = new Button { Text = "Prev", FontSize = 8, AutomationId = "btnPrev", BackgroundColor = Color.LightGray, Padding = new Thickness(5), Command = new Command(() => { _carouselView.Position--; }, () => { return(_carouselView.Position > 0); }) }; _btnNext = new Button { Text = "Next", FontSize = 8, AutomationId = "btnNext", BackgroundColor = Color.LightGray, Padding = new Thickness(5), Command = new Command(() => { _carouselView.Position++; }, () => { var items = (_carouselView.ItemsSource as ObservableCollection <CollectionViewGalleryTestItem>); return(_carouselView.Position < items.Count - 1); }) }; var btnRemoveLast = new Button { Text = "DEL Last", FontSize = 8, AutomationId = "btnRemoveLast", BackgroundColor = Color.LightGray, Padding = new Thickness(5), Command = new Command(() => { var items = (_carouselView.ItemsSource as ObservableCollection <CollectionViewGalleryTestItem>); var indexToRemove = items.Count - 1; items.Remove(items[indexToRemove]); }) }; layoutBtn.Children.Add(btnRemove); layoutBtn.Children.Add(_btnPrev); layoutBtn.Children.Add(_btnNext); layoutBtn.Children.Add(btnRemoveLast); layout.Children.Add(layoutBtn); Grid.SetRow(layoutBtn, 5); Content = layout; }
public PropagateCodeGallery(IItemsLayout itemsLayout, int itemsCount = 2) { Title = $"Propagate FlowDirection=RTL"; var layout = new Grid { RowDefinitions = new RowDefinitionCollection { new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Star } }, FlowDirection = FlowDirection.RightToLeft, Visual = VisualMarker.Material }; var itemTemplate = ExampleTemplates.PropagationTemplate(); var emptyView = ExampleTemplates.PropagationTemplate().CreateContent() as View; var collectionView = new CollectionView { ItemsLayout = itemsLayout, ItemTemplate = itemTemplate, EmptyView = emptyView }; var generator = new ItemsSourceGenerator(collectionView, initialItems: itemsCount); layout.Children.Add(generator); var instructions = new Label(); UpdateInstructions(layout, instructions, itemsCount == 0); Grid.SetRow(instructions, 2); layout.Children.Add(instructions); var switchLabel = new Label { Text = "Toggle FlowDirection" }; var switchLayout = new StackLayout { Orientation = StackOrientation.Horizontal }; var updateSwitch = new Switch { }; updateSwitch.Toggled += (sender, args) => { layout.FlowDirection = layout.FlowDirection == FlowDirection.RightToLeft ? FlowDirection.LeftToRight : FlowDirection.RightToLeft; UpdateInstructions(layout, instructions, itemsCount == 0); }; switchLayout.Children.Add(switchLabel); switchLayout.Children.Add(updateSwitch); Grid.SetRow(switchLayout, 1); layout.Children.Add(switchLayout); layout.Children.Add(collectionView); Grid.SetRow(collectionView, 3); Content = layout; generator.GenerateItems(); }
public UngroupedReorderingGallery(IItemsLayout itemsLayout) { var layout = new Grid { RowDefinitions = new RowDefinitionCollection { new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Star } } }; var reorderCompletedLabel = new Label { Text = "ReorderCompleted (event): NA", }; var itemTemplate = ExampleTemplates.SpacingTemplate(); var collectionView = new CollectionView { ItemsLayout = itemsLayout, ItemTemplate = itemTemplate, AutomationId = "collectionview", CanReorderItems = true }; collectionView.ReorderCompleted += (sender, e) => reorderCompletedLabel.Text = $"ReorderCompleted (event): {DateTime.Now}"; var generator = new ItemsSourceGenerator(collectionView, initialItems: 20, itemsSourceType: ItemsSourceType.ObservableCollection); var itemsSourceTypeSelector = new EnumSelector <ItemsSourceType>(() => generator.ItemsSourceType, sourceType => UpdateItemsSourceType(generator, sourceType, collectionView)); var spacingModifier = new SpacingModifier(collectionView.ItemsLayout, "Update_Spacing"); var reloadButton = new Button { Text = "Reload Current Source", AutomationId = "btnReload", HorizontalOptions = LayoutOptions.Start }; reloadButton.Clicked += (sender, e) => ReloadItemsSource(collectionView); layout.Children.Add(generator); layout.Children.Add(itemsSourceTypeSelector); layout.Children.Add(spacingModifier); layout.Children.Add(reorderCompletedLabel); layout.Children.Add(reloadButton); layout.Children.Add(collectionView); Grid.SetRow(itemsSourceTypeSelector, 1); Grid.SetRow(spacingModifier, 2); Grid.SetRow(reorderCompletedLabel, 3); Grid.SetRow(reloadButton, 4); Grid.SetRow(collectionView, 5); Content = layout; generator.GenerateItems(); }
public IndicatorCodeGallery() { Title = "IndicatorView Gallery"; On <iOS>().SetLargeTitleDisplay(LargeTitleDisplayMode.Never); var nItems = 10; var layout = new Grid { RowDefinitions = new RowDefinitionCollection { new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = GridLength.Star }, new RowDefinition { Height = GridLength.Auto } } }; var itemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Horizontal) { SnapPointsType = SnapPointsType.MandatorySingle, SnapPointsAlignment = SnapPointsAlignment.Center }; var itemTemplate = ExampleTemplates.CarouselTemplate(); var carouselView = new CarouselView { ItemsLayout = itemsLayout, ItemTemplate = itemTemplate, BackgroundColor = Color.LightGray, AutomationId = "TheCarouselView" }; layout.Children.Add(carouselView); var generator = new ItemsSourceGenerator(carouselView, nItems, ItemsSourceType.ObservableCollection, false); layout.Children.Add(generator); generator.GenerateItems(); var indicatorView = new IndicatorView { HorizontalOptions = LayoutOptions.Center, Margin = new Thickness(12, 6, 12, 24), IndicatorColor = Color.Gray, SelectedIndicatorColor = Color.Black, IndicatorsShape = IndicatorShape.Square, AutomationId = "TheIndicatorView" }; IndicatorView.SetItemsSourceBy(indicatorView, carouselView); layout.Children.Add(indicatorView); var stckMaxVisible = new StackLayout { Orientation = StackOrientation.Horizontal }; stckMaxVisible.Children.Add(new Label { VerticalOptions = LayoutOptions.Center, Text = "MaximumVisible" }); var maxVisibleSlider = new Slider { Maximum = nItems, Minimum = 0, Value = nItems, WidthRequest = 150, BackgroundColor = Color.Pink }; stckMaxVisible.Children.Add(maxVisibleSlider); maxVisibleSlider.ValueChanged += (s, e) => { var maximumVisible = (int)maxVisibleSlider.Value; indicatorView.MaximumVisible = maximumVisible; }; layout.Children.Add(stckMaxVisible); var stckColors = new StackLayout { Orientation = StackOrientation.Horizontal }; stckColors.Children.Add(new Label { VerticalOptions = LayoutOptions.Center, Text = "IndicatorColor" }); var colors = new List <string> { "Black", "Blue", "Red" }; var colorsPicker = new Picker { ItemsSource = colors, WidthRequest = 150 }; colorsPicker.SelectedIndex = 0; colorsPicker.SelectedIndexChanged += (s, e) => { var selectedIndex = colorsPicker.SelectedIndex; switch (selectedIndex) { case 0: indicatorView.IndicatorColor = Color.Black; break; case 1: indicatorView.IndicatorColor = Color.Blue; break; case 2: indicatorView.IndicatorColor = Color.Red; break; } }; stckColors.Children.Add(colorsPicker); layout.Children.Add(stckColors); var stckTemplate = new StackLayout { Orientation = StackOrientation.Horizontal }; stckTemplate.Children.Add(new Label { VerticalOptions = LayoutOptions.Center, Text = "IndicatorTemplate" }); var templates = new List <string> { "Circle", "Square", "Template" }; var templatePicker = new Picker { ItemsSource = templates, WidthRequest = 150, TextColor = Color.Black }; templatePicker.SelectedIndexChanged += (s, e) => { var selectedIndex = templatePicker.SelectedIndex; switch (selectedIndex) { case 0: indicatorView.IndicatorTemplate = null; indicatorView.IndicatorsShape = IndicatorShape.Circle; break; case 1: indicatorView.IndicatorTemplate = null; indicatorView.IndicatorsShape = IndicatorShape.Square; break; case 2: indicatorView.IndicatorTemplate = ExampleTemplates.IndicatorTemplate(); break; } }; templatePicker.SelectedIndex = 0; stckTemplate.Children.Add(templatePicker); layout.Children.Add(stckTemplate); Grid.SetRow(generator, 0); Grid.SetRow(stckMaxVisible, 1); Grid.SetRow(stckColors, 2); Grid.SetRow(stckTemplate, 3); Grid.SetRow(carouselView, 4); Grid.SetRow(indicatorView, 5); Content = layout; generator.CollectionChanged += (sender, e) => { maxVisibleSlider.Maximum = generator.Count; }; }