protected override void UpdateLayout()
 {
     base.UpdateLayout();
     if (_backgroundCanvas.IsValueCreated)
     {
         BackgroundCanvas.Geometry = Control.Geometry;
     }
     if (_clipper.IsValueCreated)
     {
         ClipperCanvas.Geometry = Control.Geometry;
         ClipperCanvas.Invalidate();
     }
 }
 protected virtual void OnLayout(object sender, Native.LayoutEventArgs e)
 {
     RealControl.Geometry = Control.Geometry;
     if (_backgroundCanvas.IsValueCreated)
     {
         BackgroundCanvas.Geometry = Control.Geometry;
     }
     if (_clipper.IsValueCreated)
     {
         ClipperCanvas.Geometry = Control.Geometry;
         ClipperCanvas.Invalidate();
     }
 }
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (Control != null)
                {
                    Control.LayoutUpdated -= OnLayout;
                }
                if (_backgroundCanvas.IsValueCreated)
                {
                    BackgroundCanvas.PaintSurface -= OnBackgroundPaint;
                    BackgroundCanvas.Unrealize();
                    _backgroundCanvas = null;
                }

                if (_clipper.IsValueCreated)
                {
                    ClipperCanvas.PaintSurface -= OnClipperPaint;
                    ClipperCanvas.Unrealize();
                    _clipper = null;
                }
            }
            base.Dispose(disposing);
        }