public DiscountTemplate(ListViewAnimation parentListView, int rowHeight)
            {
                SelectColor = (Color)App.Current.Resources[MainStyles.ListSelectColor];

                Grid gridDiscountItem = new Grid
                {
                    Padding = new Thickness (10),
                    BackgroundColor = (Color)App.Current.Resources[MainStyles.ListBackgroundColor],
                    RowDefinitions = 
                    {
                        new RowDefinition { Height = new GridLength(1, GridUnitType.Star)  },
                        new RowDefinition { Height = new GridLength(2, GridUnitType.Star)  }
                    },
                    ColumnDefinitions = 
                    {
                        new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star)},
                        new ColumnDefinition { Width = new GridLength(4, GridUnitType.Star)}
                    }
                };

                var fileNameConverter = new FileNameToImageConverter();

                // Company logo
                var imgCompanyLogo = new ImageExtended
                {
                    WidthRequest = Device.OnPlatform(64, 64, 64),
                    HeightRequest = Device.OnPlatform(64, 64, 64),
                    Aspect = Aspect.AspectFit,
                    
                };
                imgCompanyLogo.SetBinding(Image.SourceProperty, new Binding("LogoFileName", BindingMode.Default, fileNameConverter));


                var stackCompanyLogo = new StackLayout
                {
                    VerticalOptions = LayoutOptions.Center,
                    Children = { imgCompanyLogo }
                };
                gridDiscountItem.Children.Add(stackCompanyLogo, 0, 1, 0, 2);

                // Header
                Grid headerLayout = new Grid
                {
                    Padding = new Thickness(2, 0, 0, 0),
                    RowDefinitions = 
                    {
                        new RowDefinition { Height = GridLength.Auto }
                    },
                    ColumnDefinitions = 
                    {
                        new ColumnDefinition { Width = new GridLength(3, GridUnitType.Star)},
                        new ColumnDefinition { Width = GridLength.Auto }//new GridLength(1, GridUnitType.Star)},
                    }
                };
                
                // Title
                var txtTitle = new Label
                {
                    VerticalOptions = LayoutOptions.End,
                    Style = (Style)App.Current.Resources[LabelStyles.ListTitleStyle]
                };
                txtTitle.SetBinding(Label.TextProperty, "Name");

                headerLayout.Children.Add(txtTitle, 0, 0);
                
                #region Percent label
                var txtPercent = new Label
                {
                    Style = (Style)App.Current.Resources[LabelStyles.ListPercentStyle],
                    VerticalOptions = LayoutOptions.End
                };
                txtPercent.SetBinding(Label.TextProperty, "DiscountPercent");

                var percentLayout = new StackLayout
                {
                    Spacing = 0,
                    Orientation = StackOrientation.Horizontal,
                    Children =
                    {
                        txtPercent,
                        new Label
                        { 
                            Style = (Style)App.Current.Resources[LabelStyles.ListPercentSymbolStyle],
                            VerticalOptions = LayoutOptions.End
                        }
                    }
                };
                #endregion

                #region Category layout
                var txtCategory = new Label
                {
                    Style = (Style)App.Current.Resources[LabelStyles.CategoryStyle],
                    VerticalOptions = LayoutOptions.CenterAndExpand,
                    HorizontalOptions = LayoutOptions.CenterAndExpand
                };
                txtCategory.SetBinding(Label.TextProperty, "FirstCategoryName");
                txtCategory.SetBinding(BackgroundColorProperty, "FirstCategoryColor");

                var categoryLayout = new StackLayout
                {
                    Padding = Device.OnPlatform(new Thickness(4), new Thickness(4), new Thickness(6)),
                    VerticalOptions = LayoutOptions.Center,
                    HorizontalOptions = LayoutOptions.Center,
                    Children =
                    {
                        txtCategory
                    }
                };
                categoryLayout.SetBinding(BackgroundColorProperty, "FirstCategoryColor");

                var txtCategoryMore = new Label
                {
                    Text = "...",
                    Style = (Style)App.Current.Resources[LabelStyles.CategoryStyle],
                    VerticalOptions = LayoutOptions.CenterAndExpand,
                    HorizontalOptions = LayoutOptions.CenterAndExpand
                };
                txtCategory.SetBinding(BackgroundColorProperty, "FirstCategoryColor");

                var stackCategoryMore = new StackLayout
                {
                    Padding = Device.OnPlatform(new Thickness(4), new Thickness(4), new Thickness(6)),
                    VerticalOptions = LayoutOptions.Center,
                    HorizontalOptions = LayoutOptions.Center,
                    Children =
                    {
                        txtCategoryMore
                    }
                };
                stackCategoryMore.SetBinding(BackgroundColorProperty, "FirstCategoryColor");
                stackCategoryMore.SetBinding(IsVisibleProperty, "IsCategoryMore");
                #endregion

                var infoDiscountLayout = new StackLayout
                {
                    Orientation = StackOrientation.Horizontal,
                    
                    Children =
                    {
                        percentLayout,
                        categoryLayout,
                        stackCategoryMore
                    }
                };

                headerLayout.Children.Add(infoDiscountLayout, 1, 0);
                gridDiscountItem.Children.Add(headerLayout, 1, 2, 0, 1);
                
                #region Description
                var txtDescription = new LabelExtended 
                { 
                    IsWrapped = true,
                    Style = (Style)App.Current.Resources[LabelStyles.DescriptionStyle],
                };
                txtDescription.GestureRecognizers.Clear();
                txtDescription.SetBinding(LabelExtended.TextProperty, new Binding("Description", BindingMode.Default, new TextHeightLimitation()));

                var layoutDescription = new RelativeLayout();
                layoutDescription.Children.Add(txtDescription,
                    Constraint.Constant(2),
                    Constraint.Constant(0),
                    Constraint.RelativeToParent(parent => { return parent.Width - 2; }),
                    Constraint.RelativeToParent(parent => { return parent.Height; }));

                gridDiscountItem.Children.Add(layoutDescription, 1, 2, 1, 2);
                #endregion

                var boxBorder = new BorderBox
                {
                    Padding = new Thickness(8, 4),
                    HeightRequest = rowHeight - 16,
                };
                boxBorder.BorderColor = (Color)App.Current.Resources[MainStyles.ListBorderColor];
                boxBorder.BorderWidth = 1;
                boxBorder.Content = gridDiscountItem;
                
                var layout = new AbsoluteLayout
                {
                    Padding = new Thickness (8, 4),
                };
                parentListView.AnimationListAdd(layout);
                
                AbsoluteLayout.SetLayoutFlags(boxBorder, AbsoluteLayoutFlags.All);
                AbsoluteLayout.SetLayoutBounds(boxBorder, new Rectangle(0f, 0f, 1f, 1f));
                layout.Children.Add(boxBorder);

                View = layout;
            }
            public DiscountTemplate(ListViewAnimation parentListView, int rowHeight)
            {
                SelectColor = (Color)App.Current.Resources[MainStyles.ListSelectColor];

                Grid gridDiscountItem = new Grid
                {
                    Padding         = new Thickness(10),
                    BackgroundColor = (Color)App.Current.Resources[MainStyles.ListBackgroundColor],
                    RowDefinitions  =
                    {
                        new RowDefinition {
                            Height = new GridLength(1, GridUnitType.Star)
                        },
                        new RowDefinition {
                            Height = new GridLength(2, GridUnitType.Star)
                        }
                    },
                    ColumnDefinitions =
                    {
                        new ColumnDefinition {
                            Width = new GridLength(1, GridUnitType.Star)
                        },
                        new ColumnDefinition {
                            Width = new GridLength(4, GridUnitType.Star)
                        }
                    }
                };

                var fileNameConverter = new FileNameToImageConverter();

                // Company logo
                var imgCompanyLogo = new ImageExtended
                {
                    WidthRequest  = Device.OnPlatform(64, 64, 64),
                    HeightRequest = Device.OnPlatform(64, 64, 64),
                    Aspect        = Aspect.AspectFit,
                };

                imgCompanyLogo.SetBinding(Image.SourceProperty, new Binding("LogoFileName", BindingMode.Default, fileNameConverter));


                var stackCompanyLogo = new StackLayout
                {
                    VerticalOptions = LayoutOptions.Center,
                    Children        = { imgCompanyLogo }
                };

                gridDiscountItem.Children.Add(stackCompanyLogo, 0, 1, 0, 2);

                // Header
                Grid headerLayout = new Grid
                {
                    Padding        = new Thickness(2, 0, 0, 0),
                    RowDefinitions =
                    {
                        new RowDefinition {
                            Height = GridLength.Auto
                        }
                    },
                    ColumnDefinitions =
                    {
                        new ColumnDefinition {
                            Width = new GridLength(3, GridUnitType.Star)
                        },
                        new ColumnDefinition {
                            Width = GridLength.Auto
                        }                                               //new GridLength(1, GridUnitType.Star)},
                    }
                };

                // Title
                var txtTitle = new Label
                {
                    VerticalOptions = LayoutOptions.End,
                    Style           = (Style)App.Current.Resources[LabelStyles.ListTitleStyle]
                };

                txtTitle.SetBinding(Label.TextProperty, "Name");

                headerLayout.Children.Add(txtTitle, 0, 0);

                #region Percent label
                var txtPercent = new Label
                {
                    Style           = (Style)App.Current.Resources[LabelStyles.ListPercentStyle],
                    VerticalOptions = LayoutOptions.End
                };
                txtPercent.SetBinding(Label.TextProperty, "DiscountPercent");

                var percentLayout = new StackLayout
                {
                    Spacing     = 0,
                    Orientation = StackOrientation.Horizontal,
                    Children    =
                    {
                        txtPercent,
                        new Label
                        {
                            Style           = (Style)App.Current.Resources[LabelStyles.ListPercentSymbolStyle],
                            VerticalOptions = LayoutOptions.End
                        }
                    }
                };
                #endregion

                #region Category layout
                var txtCategory = new Label
                {
                    Style             = (Style)App.Current.Resources[LabelStyles.CategoryStyle],
                    VerticalOptions   = LayoutOptions.CenterAndExpand,
                    HorizontalOptions = LayoutOptions.CenterAndExpand
                };
                txtCategory.SetBinding(Label.TextProperty, "FirstCategoryName");
                txtCategory.SetBinding(BackgroundColorProperty, "FirstCategoryColor");

                var categoryLayout = new StackLayout
                {
                    Padding           = Device.OnPlatform(new Thickness(4), new Thickness(4), new Thickness(6)),
                    VerticalOptions   = LayoutOptions.Center,
                    HorizontalOptions = LayoutOptions.Center,
                    Children          =
                    {
                        txtCategory
                    }
                };
                categoryLayout.SetBinding(BackgroundColorProperty, "FirstCategoryColor");

                var txtCategoryMore = new Label
                {
                    Text              = "...",
                    Style             = (Style)App.Current.Resources[LabelStyles.CategoryStyle],
                    VerticalOptions   = LayoutOptions.CenterAndExpand,
                    HorizontalOptions = LayoutOptions.CenterAndExpand
                };
                txtCategory.SetBinding(BackgroundColorProperty, "FirstCategoryColor");

                var stackCategoryMore = new StackLayout
                {
                    Padding           = Device.OnPlatform(new Thickness(4), new Thickness(4), new Thickness(6)),
                    VerticalOptions   = LayoutOptions.Center,
                    HorizontalOptions = LayoutOptions.Center,
                    Children          =
                    {
                        txtCategoryMore
                    }
                };
                stackCategoryMore.SetBinding(BackgroundColorProperty, "FirstCategoryColor");
                stackCategoryMore.SetBinding(IsVisibleProperty, "IsCategoryMore");
                #endregion

                var infoDiscountLayout = new StackLayout
                {
                    Orientation = StackOrientation.Horizontal,

                    Children =
                    {
                        percentLayout,
                        categoryLayout,
                        stackCategoryMore
                    }
                };

                headerLayout.Children.Add(infoDiscountLayout, 1, 0);
                gridDiscountItem.Children.Add(headerLayout, 1, 2, 0, 1);

                #region Description
                var txtDescription = new LabelExtended
                {
                    IsWrapped = true,
                    Style     = (Style)App.Current.Resources[LabelStyles.DescriptionStyle],
                };
                txtDescription.GestureRecognizers.Clear();
                txtDescription.SetBinding(LabelExtended.TextProperty, new Binding("Description", BindingMode.Default, new TextHeightLimitation()));

                var layoutDescription = new RelativeLayout();
                layoutDescription.Children.Add(txtDescription,
                                               Constraint.Constant(2),
                                               Constraint.Constant(0),
                                               Constraint.RelativeToParent(parent => { return(parent.Width - 2); }),
                                               Constraint.RelativeToParent(parent => { return(parent.Height); }));

                gridDiscountItem.Children.Add(layoutDescription, 1, 2, 1, 2);
                #endregion

                var boxBorder = new BorderBox
                {
                    Padding       = new Thickness(8, 4),
                    HeightRequest = rowHeight - 16,
                };
                boxBorder.BorderColor = (Color)App.Current.Resources[MainStyles.ListBorderColor];
                boxBorder.BorderWidth = 1;
                boxBorder.Content     = gridDiscountItem;

                var layout = new AbsoluteLayout
                {
                    Padding = new Thickness(8, 4),
                };
                parentListView.AnimationListAdd(layout);

                AbsoluteLayout.SetLayoutFlags(boxBorder, AbsoluteLayoutFlags.All);
                AbsoluteLayout.SetLayoutBounds(boxBorder, new Rectangle(0f, 0f, 1f, 1f));
                layout.Children.Add(boxBorder);

                View = layout;
            }