private CarouselLayout CreatePagesCarousel() { var carousel = new CarouselLayout { HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand, IndicatorStyle = _indicatorStyle, ItemTemplate = new DataTemplate(typeof(DynamicTemplateLayout)) }; carousel.SetBinding(CarouselLayout.ItemsSourceProperty, "Pages"); carousel.SetBinding(CarouselLayout.SelectedItemProperty, "CurrentPage", BindingMode.TwoWay); return carousel; }
public HomePage(CarouselLayout.IndicatorStyleEnum indicatorStyle) { _indicatorStyle = indicatorStyle; _viewModel = new TabbedPageViewModel(); BindingContext = _viewModel; BackgroundColor = Color.Black; Title = _indicatorStyle.ToString(); _relativeLayout = new RelativeLayout { HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand }; var pagesCarousel = CreatePagesCarousel(); var dots = CreatePagerIndicatorContainer(); _tabs = CreateTabs(); switch (pagesCarousel.IndicatorStyle) { case CarouselLayout.IndicatorStyleEnum.Dots: _relativeLayout.Children.Add(pagesCarousel, Constraint.RelativeToParent((parent) => { return parent.X; }), Constraint.RelativeToParent((parent) => { return parent.Y; }), Constraint.RelativeToParent((parent) => { return parent.Width; }), Constraint.RelativeToParent((parent) => { return parent.Height / 2; }) ); _relativeLayout.Children.Add(dots, Constraint.Constant(0), Constraint.RelativeToView(pagesCarousel, (parent, sibling) => { return sibling.Height - 18; }), Constraint.RelativeToParent(parent => parent.Width), Constraint.Constant(18) ); break; case CarouselLayout.IndicatorStyleEnum.Tabs: var tabsHeight = 50; _relativeLayout.Children.Add(_tabs, Constraint.Constant(0), Constraint.RelativeToParent((parent) => { return parent.Height - tabsHeight; }), Constraint.RelativeToParent(parent => parent.Width), Constraint.Constant(tabsHeight) ); _relativeLayout.Children.Add(pagesCarousel, Constraint.RelativeToParent((parent) => { return parent.X; }), Constraint.RelativeToParent((parent) => { return parent.Y; }), Constraint.RelativeToParent((parent) => { return parent.Width; }), Constraint.RelativeToView(_tabs, (parent, sibling) => { return parent.Height - (sibling.Height); }) ); break; default: _relativeLayout.Children.Add(pagesCarousel, Constraint.RelativeToParent((parent) => { return parent.X; }), Constraint.RelativeToParent((parent) => { return parent.Y; }), Constraint.RelativeToParent((parent) => { return parent.Width; }), Constraint.RelativeToParent((parent) => { return parent.Height; }) ); break; } Content = _relativeLayout; }