public ZoomCanvas() { overlaySurface.TransformationPivot = SKPoint.Empty; overlaySurface.AttachParent(this); this.GestureRecognizers.Add(panGesture); panGesture.PanUpdated += PanGesture_PanUpdated; this.GestureRecognizers.Add(pinchGesture); pinchGesture.PinchUpdated += OnPinchUpdated; ZoomCommand = new Command(o => { float scaleFactor = 0; if (o is string) { scaleFactor = float.Parse((string)o, CultureInfo.InvariantCulture); } else { scaleFactor = Convert.ToSingle(o); } scaleTransformation = SKMatrix.MakeScale((float)scaleFactor, (float)scaleFactor); surface.Transformation = translateTransformation.Concat(scaleTransformation); }); IncrementalZoomCommand = new Command(o => { float scaleFactor = 0; if (o is string) { scaleFactor = float.Parse((string)o, CultureInfo.InvariantCulture); } else { scaleFactor = Convert.ToSingle(o); } scaleTransformation = scaleTransformation .Scale(scaleFactor, scaleFactor); surface.Transformation = translateTransformation.Concat(scaleTransformation); }); }