コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }