protected override void OnElementChanged(ElementChangedEventArgs <StackLayout> e)
        {
            base.OnElementChanged(e);

            if (e.OldElement != null || Element == null)
            {
                return;
            }
            try
            {
                stack = e.NewElement as RoundEdgeStackLayout;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(@"ERROR:", ex.Message);
            }
        }
        protected void UpdateElement(CoreGraphics.CGRect rect)
        {
            RoundEdgeStackLayout stack = (RoundEdgeStackLayout)this.Element;
            CGColor startColor         = stack.StartColor.ToCGColor();
            CGColor endColor           = stack.EndColor.ToCGColor();

            try
            {
                //if(stack.HasBorderColor == true)
                //{

                //}
                //else if(stack.BorderColor != null)
                //{

                //}
                if (stack.HasBorderColor == true && stack.BorderColor.ToCGColor() != null)
                {
                    double min = Math.Min(Element.Width, Element.Height);
                    this.Layer.CornerRadius  = (float)(min / 2.0);
                    this.Layer.MasksToBounds = false;
                    this.Layer.BorderColor   = stack.BorderColor.ToCGColor();
                    this.Layer.BorderWidth   = Convert.ToSingle(stack.BorderThickness);
                    this.ClipsToBounds       = true;
                }
                else
                {
                }
            }
            catch (Exception ex)
            {
                var msg = ex.Message;
                //Debug.WriteLine("Unable to create circle image: " + ex);
            }

            var           gradientLayer = new CAGradientLayer();
            GradientStyle gradientStyle = stack.GradientDirection;

            if (gradientStyle != GradientStyle.None)
            {
                if (gradientStyle == GradientStyle.Vertical)
                {
                }
                else if (gradientStyle == GradientStyle.Horizontal)
                {
                    gradientLayer.StartPoint = new CGPoint(0, 0.5);
                    gradientLayer.EndPoint   = new CGPoint(1, 0.5);
                }
                else if (gradientStyle == GradientStyle.Inclined)
                {
                    gradientLayer.StartPoint = new CGPoint(0, 0.5);
                    gradientLayer.EndPoint   = new CGPoint(1, 0.5);
                }
                else
                {
                }
            }

            nfloat cornerRadius = 0.0f;

            try
            {
                if (stack.CornerWRT == CornerRadiusReference.WRTHeightRequest && stack.CornerRadius == 0)
                {
                    cornerRadius = (float)(stack.HeightRequest / 2);
                }
                else if (stack.CornerWRT == CornerRadiusReference.WRTWidthRequest && stack.CornerRadius == 0)
                {
                    cornerRadius = (float)(stack.WidthRequest / 2);
                }
                else
                {
                    cornerRadius = (float)(stack.CornerRadius);
                }
            }
            catch (Exception ex)
            {
                var msg = ex.Message;
            }

            gradientLayer.Frame  = rect;
            gradientLayer.Colors = new CGColor[] { startColor, endColor };
            gradientLayer.ModelLayer.CornerRadius = cornerRadius;//(float)(stack.CornerRadius);
            NativeView.Layer.InsertSublayer(gradientLayer, 0);
        }