/// <summary> /// 对inkcanvas进行缩放并旋转 /// </summary> /// <param name="inkcanvas">缩放对象</param> /// <param name="rate">缩放比率</param> public static void InkCanvasZoomRotate(InkCanvas inkCanvas, double duration, double fromZoomRate, double toZoomRate, double centerX, double centerY) { TransformGroup transformGroup = new TransformGroup(); ScaleTransform scaleTransform = new ScaleTransform(); transformGroup.Children.Add(scaleTransform); //inkCanvas.RenderTransform = scaleTransform; scaleTransform.CenterX = inkCanvas.ActualWidth * centerX; scaleTransform.CenterY = inkCanvas.ActualHeight * centerY; DoubleAnimation myDoubleAnimation = new DoubleAnimation(); //宽度缩放 myDoubleAnimation.From = fromZoomRate; myDoubleAnimation.To = toZoomRate; myDoubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(duration)); if (inkCanvas.FindName("scaleTransform") != null) { inkCanvas.UnregisterName("scaleTransform"); } inkCanvas.RegisterName("scaleTransform", scaleTransform); Storyboard.SetTargetName(myDoubleAnimation, "scaleTransform"); Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(ScaleTransform.ScaleXProperty)); DoubleAnimation myDoubleAnimationHeight = new DoubleAnimation(); //高度缩放 myDoubleAnimationHeight.From = fromZoomRate; myDoubleAnimationHeight.To = toZoomRate; myDoubleAnimationHeight.Duration = myDoubleAnimation.Duration; Storyboard.SetTargetName(myDoubleAnimationHeight, "scaleTransform"); Storyboard.SetTargetProperty(myDoubleAnimationHeight, new PropertyPath(ScaleTransform.ScaleYProperty)); RotateTransform rotateTransform = new RotateTransform(); transformGroup.Children.Add(rotateTransform); inkCanvas.RenderTransform = transformGroup; rotateTransform.CenterX = scaleTransform.CenterX; rotateTransform.CenterY = scaleTransform.CenterY; DoubleAnimation rotateDoubleAnimation = new DoubleAnimation(); rotateDoubleAnimation.From = 0; rotateDoubleAnimation.To = 720; rotateDoubleAnimation.Duration = myDoubleAnimation.Duration; if (inkCanvas.FindName("rotateTransform") != null) { inkCanvas.UnregisterName("rotateTransform"); } inkCanvas.RegisterName("rotateTransform", rotateTransform); Storyboard.SetTargetName(rotateDoubleAnimation, "rotateTransform"); Storyboard.SetTargetProperty(rotateDoubleAnimation, new PropertyPath(RotateTransform.AngleProperty)); Storyboard myStoryboard = new Storyboard(); myStoryboard.Children.Add(myDoubleAnimation); myStoryboard.Children.Add(myDoubleAnimationHeight); myStoryboard.Children.Add(rotateDoubleAnimation); myStoryboard.Begin(inkCanvas); }
/// <summary> /// 对inkcanvas进行缩放 /// </summary> /// <param name="inkcanvas">缩放对象</param> /// <param name="rate">缩放比率</param> public void InkCanvasZoom(InkCanvas inkCanvas, double fromRate, double toRate, double centerX, double centerY) { //((ScaleTransform)inkCanvas.RenderTransform).CenterX = centerX; //((ScaleTransform)inkCanvas.RenderTransform).CenterY = centerY; ScaleTransform scaleTransform = new ScaleTransform(); inkCanvas.RenderTransform = scaleTransform; scaleTransform.CenterX = inkCanvas.ActualWidth * centerX; scaleTransform.CenterY = inkCanvas.ActualHeight * centerY; DoubleAnimation myDoubleAnimation = new DoubleAnimation(); //宽度缩放 myDoubleAnimation.From = fromRate; myDoubleAnimation.To = toRate; myDoubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.5)); if (inkCanvas.FindName("scaleTransform") != null) { inkCanvas.UnregisterName("scaleTransform"); } inkCanvas.RegisterName("scaleTransform", scaleTransform); Storyboard.SetTargetName(myDoubleAnimation, "scaleTransform"); Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(ScaleTransform.ScaleXProperty)); DoubleAnimation myDoubleAnimationHeight = new DoubleAnimation(); //高度缩放 myDoubleAnimationHeight.From = fromRate; myDoubleAnimationHeight.To = toRate; myDoubleAnimationHeight.Duration = new Duration(TimeSpan.FromSeconds(0.5)); Storyboard.SetTargetName(myDoubleAnimationHeight, "scaleTransform"); Storyboard.SetTargetProperty(myDoubleAnimationHeight, new PropertyPath(ScaleTransform.ScaleYProperty)); Storyboard myStoryboard = new Storyboard(); myStoryboard.Children.Add(myDoubleAnimation); myStoryboard.Children.Add(myDoubleAnimationHeight); myStoryboard.Begin(inkCanvas); }