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

            if (e.NewElement != null && e.OldElement == null)
            {
                CorneredContentView corneredContentView = (this.Element as CorneredContentView);

                if (corneredContentView.Content == null)
                {
                    corneredContentView.Content = new Grid();
                }

                this.Validate(corneredContentView);

                this.SetBackground(this._drawable = new CorneredContentViewDrawable(corneredContentView, this.Context.ToPixels));

                this.SetupShadow(corneredContentView);
            }
        }
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            CorneredContentView corneredContentView = this.Element as CorneredContentView;

            this.Validate(corneredContentView);

            base.OnElementPropertyChanged(sender, e);
            switch (e.PropertyName)
            {
            case nameof(VisualElement.BackgroundColor):
            {
                this._drawable.Dispose();
                this.SetBackground(this._drawable = new CorneredContentViewDrawable(corneredContentView, this.Context.ToPixels));
                break;
            }

            case nameof(CorneredContentView.CornerRadius):
            {
                this.Invalidate();
                this.SetupShadow(corneredContentView);
                break;
            }

            case nameof(CorneredContentView.BorderColor):
            case nameof(CorneredContentView.BorderThickness):
            {
                this.Invalidate();
                break;
            }

            case nameof(CorneredContentView.HasShadow):
            {
                this.SetupShadow(corneredContentView);
                break;
            }
            }
        }