Silverlight 动画类

    技术2022-06-30  81

    Silverlight 使用了有一段时间了,它的动画效果是很不错,但是只在Blend中制作动画,太呆板,不能很好的灵活应用,于是写了一个动画类,供大家使用,多提意见,现在只扩展了2D动画,以后再扩展3D动画,下面面是类的主题程序,稍后附上使用方法。   

     

        #region 动画类    /// <summary>    /// 动画类    /// </summary>    public class AnimationSL    {        #region 注释信息        //RenderTransformOrigin:中心点        //ScaleTransform:将一个对象在水平或垂直方向进行放大或缩小。        //SkewTransform:将一个对象相对于X轴或Y轴进行倾斜        //RotateTransform:将一个对象旋转特定的角度。        //TranslateTransform:将一个对象在水平或垂直方向进行移动。        #endregion

            public delegate void CompletedEvent(FrameworkElement UI, object sender, EventArgs e);        public event CompletedEvent Completed;

            #region 实例        /// <summary>        /// 实例        /// </summary>        public AnimationSL()        {            Initialize();        }        /// <summary>        /// 实例        /// </summary>        /// <param name="UI_"></param>        public AnimationSL(FrameworkElement UI_)        {            UI = UI_;            Initialize();        }        /// <summary>        /// 初始化        /// </summary>        private void Initialize()        {            RenderTransformOrigin = new _RenderTransformOriginClass(this);            ScaleTransform = new _ScaleTransformClass(this);            SkewTransform = new _SkewTransformClass(this);            RotateTransform = new _RotateTransformClass(this);            TranslateTransform = new _TranslateTransformClass(this);            DropShadowEffect = new _DropShadowEffectClass(this);            CompositeTransform = new _CompositeTransformClass(this);        }        #endregion

            #region 声明动画        private String _Name = "";        /// <summary>        /// 动画名字        /// </summary>        public String Name        {            get { return _Name; }            set { _Name = value; }        }        private FrameworkElement _UI = null;        /// <summary>        /// 动画对象        /// </summary>        public FrameworkElement UI        {            get { return _UI; }            set { _UI = value; }        }        private Storyboard _Storyboard = new Storyboard();        /// <summary>        /// 动画处理        /// </summary>        private System.Windows.Media.TransformGroup _TransformGroup = new System.Windows.Media.TransformGroup();        /// <summary>        /// 2D缩放处理        /// </summary>        private System.Windows.Media.ScaleTransform _ScaleTransform = new System.Windows.Media.ScaleTransform();        /// <summary>        /// 2D扭曲处理        /// </summary>        private System.Windows.Media.SkewTransform _SkewTransform = new System.Windows.Media.SkewTransform();        /// <summary>        /// 2D旋转处理        /// </summary>        private System.Windows.Media.RotateTransform _RotateTransform = new System.Windows.Media.RotateTransform();        /// <summary>        /// 2D移动处理        /// </summary>        private System.Windows.Media.TranslateTransform _TranslateTransform = new System.Windows.Media.TranslateTransform();        /// <summary>        /// 翻转处理        /// </summary>        private System.Windows.Media.CompositeTransform _CompositeTransform = new System.Windows.Media.CompositeTransform();        #endregion

            #region 声明动画处理        private PointAnimationUsingKeyFrames _PA_RenderTransformOrigin = new PointAnimationUsingKeyFrames();        /// <summary>        /// 中心点        /// </summary>        public PointAnimationUsingKeyFrames PA_RenderTransformOrigin        {            get { return _PA_RenderTransformOrigin; }            set { _PA_RenderTransformOrigin = value; }        }        private DoubleAnimationUsingKeyFrames _DA_ScaleTransform_X = new DoubleAnimationUsingKeyFrames();        /// <summary>        /// 将一个对象在水平或垂直方向进行放大或缩小(X轴)        /// </summary>        public DoubleAnimationUsingKeyFrames DA_ScaleTransform_X        {            get { return _DA_ScaleTransform_X; }            set { _DA_ScaleTransform_X = value; }        }        private DoubleAnimationUsingKeyFrames _DA_ScaleTransform_Y = new DoubleAnimationUsingKeyFrames();        /// <summary>        /// 将一个对象在水平或垂直方向进行放大或缩小(Y轴)        /// </summary>        public DoubleAnimationUsingKeyFrames DA_ScaleTransform_Y        {            get { return _DA_ScaleTransform_Y; }            set { _DA_ScaleTransform_Y = value; }        }        private DoubleAnimationUsingKeyFrames _DA_SkewTransform_X = new DoubleAnimationUsingKeyFrames();        /// <summary>        /// 将一个对象相对于X轴或Y轴进行倾斜(X轴)        /// </summary>        public DoubleAnimationUsingKeyFrames DA_SkewTransform_X        {            get { return _DA_SkewTransform_X; }            set { _DA_SkewTransform_X = value; }        }        private DoubleAnimationUsingKeyFrames _DA_SkewTransform_Y = new DoubleAnimationUsingKeyFrames();        /// <summary>        /// 将一个对象相对于X轴或Y轴进行倾斜(Y轴)        /// </summary>        public DoubleAnimationUsingKeyFrames DA_SkewTransform_Y        {            get { return _DA_SkewTransform_Y; }            set { _DA_SkewTransform_Y = value; }        }        private DoubleAnimationUsingKeyFrames _DA_RotateTransform = new DoubleAnimationUsingKeyFrames();        /// <summary>        /// 将一个对象旋转特定的角度        /// </summary>        public DoubleAnimationUsingKeyFrames DA_RotateTransform        {            get { return _DA_RotateTransform; }            set { _DA_RotateTransform = value; }        }        private DoubleAnimationUsingKeyFrames _DA_TranslateTransform_X = new DoubleAnimationUsingKeyFrames();        /// <summary>        /// 将一个对象在水平或垂直方向进行移动(X轴)        /// </summary>        public DoubleAnimationUsingKeyFrames DA_TranslateTransform_X        {            get { return _DA_TranslateTransform_X; }            set { _DA_TranslateTransform_X = value; }        }        private DoubleAnimationUsingKeyFrames _DA_TranslateTransform_Y = new DoubleAnimationUsingKeyFrames();        /// <summary>        /// 将一个对象在水平或垂直方向进行移动(Y轴)        /// </summary>        public DoubleAnimationUsingKeyFrames DA_TranslateTransform_Y        {            get { return _DA_TranslateTransform_Y; }            set { _DA_TranslateTransform_Y = value; }        }

            private DoubleAnimationUsingKeyFrames _DA_CompositeTransform_X = new DoubleAnimationUsingKeyFrames();        /// <summary>        /// 将一个对象翻转(X轴)        /// </summary>        public DoubleAnimationUsingKeyFrames DA_CompositeTransform_X        {            get { return _DA_CompositeTransform_X; }            set { _DA_CompositeTransform_X = value; }        }        private DoubleAnimationUsingKeyFrames _DA_CompositeTransform_Y = new DoubleAnimationUsingKeyFrames();        /// <summary>        /// 将一个对象翻转(Y轴)        /// </summary>        public DoubleAnimationUsingKeyFrames DA_CompositeTransform_Y        {            get { return _DA_CompositeTransform_Y; }            set { _DA_CompositeTransform_Y = value; }        }        #endregion

            #region 声明投影效果        //投影效果        #endregion

            #region 鼠标进入置于最上层        private int _ZIndex = 0;        /// <summary>        /// UI的原层级        /// </summary>        public int ZIndex        {            get { return _ZIndex; }            set { _ZIndex = value; }        }        private int _MaxZIndex = 9999;        /// <summary>        /// 计算当天经过的毫秒数(如果前后操作刚好跨天,将可能导致Bug)        /// </summary>        public int MaxZIndex        {            get            {                //DateTime d1 = DateTime.Now;                //DateTime d2 = DateTime.Parse(DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + " 00:00:00");                //Int32 _MaxZIndex = Int32.Parse(Math.Ceiling(d1.Subtract(d2).TotalMilliseconds).ToString());                return _MaxZIndex;            }            set { _MaxZIndex = value; }        }        private bool _MouseEnterZIndex = false;        #endregion

            #region 鼠标点击置于最上层        private bool _MouseDownMaxZIndex = false;        /// <summary>        /// 鼠标点击置于最上层        /// </summary>        public bool MouseDownMaxZIndex        {            get { return _MouseDownMaxZIndex; }            set { _MouseDownMaxZIndex = value; }        }        #endregion

            #region 置于最上后,是否保持其层级信息不变        private bool _IsMaxZIndex = false;        /// <summary>        /// 置于最上后,是否保持其层级信息不变        /// </summary>        public bool IsMaxZIndex        {            get { return _IsMaxZIndex; }            set { _IsMaxZIndex = value; }        }        #endregion

            #region 移动时是否至于半透明状态        private bool _IsMoveOpacity = false;        /// <summary>        /// 移动时是否至于半透明状态        /// </summary>        public bool IsMoveOpacity        {            get { return _IsMoveOpacity; }            set { _IsMoveOpacity = value; }        }        #endregion

            #region 动画容器        /// <summary>        /// 动画容器        /// </summary>        public Storyboard Storyboard        {            get { return _Storyboard; }            set { _Storyboard = value; }        }        #endregion

            #region 临时        private System.Windows.Media.Effects.Effect _Effect = null;        #endregion

            #region 中心点        /// <summary>        /// 中心点        /// </summary>        public _RenderTransformOriginClass RenderTransformOrigin = null;        /// <summary>        /// 中心点        /// </summary>        public class _RenderTransformOriginClass        {            #region 声明            private AnimationSL _AnimationSL;            /// <summary>            /// 动画实例            /// </summary>            public AnimationSL AnimationSL            {                get { return _AnimationSL; }                set { _AnimationSL = value; }            }

                /// <summary>            /// 实例            /// </summary>            /// <param name="AnimationSL_">动画实例</param>            public _RenderTransformOriginClass(AnimationSL AnimationSL_)            {                AnimationSL = AnimationSL_;            }            #endregion

                #region 处理中心点            /// <summary>            /// 处理中心点            /// </summary>            /// <param name="CenterX">X轴</param>            /// <param name="CenterY">Y轴</param>            /// <param name="sTimeSpan">时间线</param>            public void AddCenter(Double CenterX, Double CenterY, Int32 sTimeSpan)            {                EasingPointKeyFrame EDK = new EasingPointKeyFrame();                EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);                EDK.Value = new Point(CenterX, CenterY);                AnimationSL.PA_RenderTransformOrigin.KeyFrames.Add(EDK);            }            #endregion

            }        #endregion

            #region 将一个对象在水平或垂直方向进行放大或缩小        /// <summary>        /// 将一个对象在水平或垂直方向进行放大或缩小        /// </summary>        public _ScaleTransformClass ScaleTransform = null;        /// <summary>        /// 将一个对象在水平或垂直方向进行放大或缩小        /// </summary>        public class _ScaleTransformClass        {            #region 声明            private AnimationSL _AnimationSL;            /// <summary>            /// 动画实例            /// </summary>            public AnimationSL AnimationSL            {                get { return _AnimationSL; }                set { _AnimationSL = value; }            }            /// <summary>            /// 实例            /// </summary>            /// <param name="AnimationSL_">动画实例</param>            public _ScaleTransformClass(AnimationSL AnimationSL_)            {                AnimationSL = AnimationSL_;            }            #endregion

                #region 处理X轴的变化            /// <summary>            /// 处理X轴的变化            /// </summary>            /// <param name="sSize">大小</param>            /// <param name="sTimeSpan">时间</param>            public void AddScaleX(Double sSize, Int32 sTimeSpan)            {                EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();                EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);                EDK.Value = sSize;                AnimationSL.DA_ScaleTransform_X.KeyFrames.Add(EDK);            }            #endregion

                #region 处理Y轴的变化            /// <summary>            /// 处理Y轴的变化            /// </summary>            /// <param name="sSize">大小</param>            /// <param name="sTimeSpan">时间</param>            public void AddScaleY(Double sSize, Int32 sTimeSpan)            {                EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();                EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);                EDK.Value = sSize;                AnimationSL.DA_ScaleTransform_Y.KeyFrames.Add(EDK);            }            #endregion        }        #endregion

            #region 将一个对象相对于X轴或Y轴进行倾斜        /// <summary>        /// 将一个对象相对于X轴或Y轴进行倾斜        /// </summary>        public _SkewTransformClass SkewTransform = null;        /// <summary>        /// 将一个对象相对于X轴或Y轴进行倾斜        /// </summary>        public class _SkewTransformClass        {            #region 声明            private AnimationSL _AnimationSL;            /// <summary>            /// 动画实例            /// </summary>            public AnimationSL AnimationSL            {                get { return _AnimationSL; }                set { _AnimationSL = value; }            }            /// <summary>            /// 实例            /// </summary>            /// <param name="AnimationSL_">动画实例</param>            public _SkewTransformClass(AnimationSL AnimationSL_)            {                _AnimationSL = AnimationSL_;            }            #endregion

                #region 处理X轴的变化            /// <summary>            /// 处理X轴的变化            /// </summary>            /// <param name="sSize">大小</param>            /// <param name="sTimeSpan">时间</param>            public void Add_AngleX(Double AngleX, Int32 sTimeSpan)            {                EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();                EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);                EDK.Value = AngleX;                AnimationSL.DA_SkewTransform_X.KeyFrames.Add(EDK);            }            #endregion

                #region 处理Y轴的变化            /// <summary>            /// 处理Y轴的变化            /// </summary>            /// <param name="sSize">大小</param>            /// <param name="sTimeSpan">时间</param>            public void Add_AngleY(Double AngleY, Int32 sTimeSpan)            {                EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();                EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);                EDK.Value = AngleY;                AnimationSL.DA_SkewTransform_Y.KeyFrames.Add(EDK);            }            #endregion        }        #endregion

            #region 将一个对象旋转特定的角度        /// <summary>        /// 将一个对象旋转特定的角度        /// </summary>        public _RotateTransformClass RotateTransform = null;        /// <summary>        /// 将一个对象旋转特定的角度        /// </summary>        public class _RotateTransformClass        {            #region 声明            private AnimationSL _AnimationSL;            /// <summary>            /// 动画实例            /// </summary>            public AnimationSL AnimationSL            {                get { return _AnimationSL; }                set { _AnimationSL = value; }            }            /// <summary>            /// 实例            /// </summary>            /// <param name="AnimationSL_">动画实例</param>            public _RotateTransformClass(AnimationSL AnimationSL_)            {                AnimationSL = AnimationSL_;            }            #endregion

                #region 处理旋转            /// <summary>            /// 处理旋转            /// </summary>            /// <param name="nAngle">旋转角度</param>            /// <param name="sTimeSpan">时间</param>            public void Angle(Double nAngle, Int32 sTimeSpan)            {                EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();                EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);                EDK.Value = nAngle;                AnimationSL.DA_RotateTransform.KeyFrames.Add(EDK);            }            #endregion

            }        #endregion

            #region 将一个对象在水平或垂直方向进行移动        /// <summary>        /// 将一个对象在水平或垂直方向进行移动        /// </summary>        public _TranslateTransformClass TranslateTransform = null;        /// <summary>        /// 将一个对象在水平或垂直方向进行移动        /// </summary>        public class _TranslateTransformClass        {            #region 声明            private AnimationSL _AnimationSL;            /// <summary>            /// 动画实例            /// </summary>            public AnimationSL AnimationSL            {                get { return _AnimationSL; }                set { _AnimationSL = value; }            }            /// <summary>            /// 实例            /// </summary>            /// <param name="AnimationSL_">动画实例</param>            public _TranslateTransformClass(AnimationSL AnimationSL_)            {                AnimationSL = AnimationSL_;            }            #endregion

                #region 处理X轴的变化            /// <summary>            /// 处理X轴的变化            /// </summary>            /// <param name="sSize">大小</param>            /// <param name="sTimeSpan">时间</param>            public void AddMoveX(Double nDistanceX, Int32 sTimeSpan)            {                EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();                EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);                EDK.Value = nDistanceX;                AnimationSL.DA_TranslateTransform_X.KeyFrames.Add(EDK);            }            #endregion

                #region 处理Y轴的变化            /// <summary>            /// 处理Y轴的变化            /// </summary>            /// <param name="sSize">大小</param>            /// <param name="sTimeSpan">时间</param>            public void AddMoveY(Double nDistanceY, Int32 sTimeSpan)            {                EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();                EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);                EDK.Value = nDistanceY;                AnimationSL.DA_TranslateTransform_Y.KeyFrames.Add(EDK);            }            #endregion        }        #endregion

            #region 将一个对象翻转        /// <summary>        /// 将一个对象翻转        /// </summary>        public _CompositeTransformClass CompositeTransform = null;        /// <summary>        /// 将一个对象翻转        /// </summary>        public class _CompositeTransformClass        {            #region 声明            private AnimationSL _AnimationSL;            /// <summary>            /// 动画实例            /// </summary>            public AnimationSL AnimationSL            {                get { return _AnimationSL; }                set { _AnimationSL = value; }            }            /// <summary>            /// 实例            /// </summary>            /// <param name="AnimationSL_">动画实例</param>            public _CompositeTransformClass(AnimationSL AnimationSL_)            {                AnimationSL = AnimationSL_;            }            #endregion

                #region 处理X轴的变化            /// <summary>            /// 处理X轴的变化            /// </summary>            /// <param name="sSize">大小</param>            /// <param name="sTimeSpan">时间</param>            public void AddScaleX(Double nDistanceX, Int32 sTimeSpan)            {                EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();                EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);                EDK.Value = nDistanceX;                AnimationSL.DA_CompositeTransform_X.KeyFrames.Add(EDK);            }            #endregion

                #region 处理Y轴的变化            /// <summary>            /// 处理Y轴的变化            /// </summary>            /// <param name="sSize">大小</param>            /// <param name="sTimeSpan">时间</param>            public void AddScaleY(Double nDistanceY, Int32 sTimeSpan)            {                EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();                EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);                EDK.Value = nDistanceY;                AnimationSL.DA_CompositeTransform_Y.KeyFrames.Add(EDK);            }            #endregion        }        #endregion

            #region 投影效果        /// <summary>        /// 投影效果        /// </summary>        public _DropShadowEffectClass DropShadowEffect = null;        /// <summary>        /// 投影效果        /// </summary>        public class _DropShadowEffectClass        {            #region 声明            private bool _IsEnabled = false;            private Double _Opacity = 100;            private System.Windows.Media.Color _Color = System.Windows.Media.Color.FromArgb(100, 128, 128, 128);            private Double _BlurRadius = 5;            private Double _Direction = 315;            private Double _ShadowDepth = 5;            private System.Windows.Media.Effects.DropShadowEffect _DropShadowEffect = null;

                public System.Windows.Media.Effects.DropShadowEffect DropShadowEffect            {                get { return _DropShadowEffect; }                set { _DropShadowEffect = value; }            }            private AnimationSL _AnimationSL;            /// <summary>            /// 实例化            /// </summary>            public _DropShadowEffectClass(AnimationSL AnimationSL)            {                _AnimationSL = AnimationSL;                System.Windows.Media.Effects.DropShadowEffect _DSE = new System.Windows.Media.Effects.DropShadowEffect();                if (_DSE != null)                {                    _DropShadowEffect = _DSE;                    _DropShadowEffect.Color = Color;                    _DropShadowEffect.Opacity = Opacity;                    _DropShadowEffect.BlurRadius = BlurRadius;                    _DropShadowEffect.Direction = _Direction;                    _DropShadowEffect.ShadowDepth = _ShadowDepth;                }            }            #endregion

                #region 是否打开投影效果

                /// <summary>            /// 是否打开投影效果            /// </summary>            public bool IsEnabled            {                get { return _IsEnabled; }                set                {                    _IsEnabled = value;                    _DropShadowEffect.Color = Color;                    _DropShadowEffect.Opacity = Opacity;                    _DropShadowEffect.BlurRadius = BlurRadius;                    _DropShadowEffect.Direction = _Direction;                    _DropShadowEffect.ShadowDepth = _ShadowDepth;                }            }            #endregion

                #region 投影颜色            /// <summary>            /// 投影颜色            /// </summary>            public System.Windows.Media.Color Color            {                get { return _Color; }                set                {                    _Color = value; _DropShadowEffect.Color = Color;                    _DropShadowEffect.Opacity = Opacity;                    _DropShadowEffect.BlurRadius = BlurRadius;                    _DropShadowEffect.Direction = _Direction;                    _DropShadowEffect.ShadowDepth = _ShadowDepth;                }            }            #endregion

                #region 透明度            /// <summary>            /// 透明度            /// </summary>            public Double Opacity            {                get { return _Opacity; }                set                {                    _Opacity = value;                    _DropShadowEffect.Color = Color;                    _DropShadowEffect.Opacity = Opacity;                    _DropShadowEffect.BlurRadius = BlurRadius;                    _DropShadowEffect.Direction = _Direction;                    _DropShadowEffect.ShadowDepth = _ShadowDepth;                }            }            #endregion

                #region 模糊半径            /// <summary>            /// 模糊半径            /// </summary>            public Double BlurRadius            {                get { return _BlurRadius; }                set                {                    _BlurRadius = value;                    _DropShadowEffect.Color = Color;                    _DropShadowEffect.Opacity = Opacity;                    _DropShadowEffect.BlurRadius = BlurRadius;                    _DropShadowEffect.Direction = _Direction;                    _DropShadowEffect.ShadowDepth = _ShadowDepth;                }            }            #endregion

                #region 投射的方向            /// <summary>            /// 投射的方向            /// </summary>            public Double Direction            {                get { return _Direction; }                set                {                    _Direction = value;                    _DropShadowEffect.Color = Color;                    _DropShadowEffect.Opacity = Opacity;                    _DropShadowEffect.BlurRadius = BlurRadius;                    _DropShadowEffect.Direction = _Direction;                    _DropShadowEffect.ShadowDepth = _ShadowDepth;                }            }            #endregion

                #region 投影的距离            /// <summary>            /// 投影的距离            /// </summary>            public Double ShadowDepth            {                get { return _ShadowDepth; }                set                {                    _ShadowDepth = value;                    _DropShadowEffect.Color = Color;                    _DropShadowEffect.Opacity = Opacity;                    _DropShadowEffect.BlurRadius = BlurRadius;                    _DropShadowEffect.Direction = _Direction;                    _DropShadowEffect.ShadowDepth = _ShadowDepth;                }            }            #endregion        }        #endregion

            #region 开始动画        /// <summary>        /// 开始动画        /// </summary>        /// <returns></returns>        public Storyboard Begin()        {            return _Beigin(UI);        }        /// <summary>        /// 开始动画        /// </summary>        /// <param name="UI_">FrameworkElement对象</param>        /// <returns></returns>        public Storyboard Begin(FrameworkElement UI_)        {            return _Beigin(UI_);        }        private Storyboard _Beigin(FrameworkElement UI_)        {            UI = UI_;            if (UI != null)            {                #region 注册声明                _TransformGroup = new System.Windows.Media.TransformGroup();                _ScaleTransform = new System.Windows.Media.ScaleTransform();                _SkewTransform = new System.Windows.Media.SkewTransform();                _RotateTransform = new System.Windows.Media.RotateTransform();                _TranslateTransform = new System.Windows.Media.TranslateTransform();                _CompositeTransform = new System.Windows.Media.CompositeTransform();

                    _TransformGroup.Children.Add(_ScaleTransform);                _TransformGroup.Children.Add(_SkewTransform);                _TransformGroup.Children.Add(_RotateTransform);                _TransformGroup.Children.Add(_TranslateTransform);                _TransformGroup.Children.Add(_CompositeTransform);                UI.RenderTransform = _TransformGroup;

                    Storyboard.Stop();

                    #region 中心点                Storyboard.Children.Remove(PA_RenderTransformOrigin);                {                    Storyboard.SetTarget(PA_RenderTransformOrigin, UI);                    Storyboard.SetTargetProperty(PA_RenderTransformOrigin,                        new PropertyPath("(UIElement.RenderTransformOrigin)"));                    Storyboard.Children.Add(PA_RenderTransformOrigin);                }                #endregion

                    #region 缩放处理                Storyboard.Children.Remove(DA_ScaleTransform_X);                {                    Storyboard.SetTarget(DA_ScaleTransform_X, UI);                    Storyboard.SetTargetProperty(DA_ScaleTransform_X,                        new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"));                    Storyboard.Children.Add(DA_ScaleTransform_X);                }                Storyboard.Children.Remove(DA_ScaleTransform_Y);                {                    Storyboard.SetTarget(DA_ScaleTransform_Y, UI);                    Storyboard.SetTargetProperty(DA_ScaleTransform_Y,                        new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"));                    Storyboard.Children.Add(DA_ScaleTransform_Y);                }                #endregion

                    #region 倾斜处理                Storyboard.Children.Remove(DA_SkewTransform_X);                {                    Storyboard.SetTarget(DA_SkewTransform_X, UI);                    Storyboard.SetTargetProperty(DA_SkewTransform_X,                        new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[1].(SkewTransform.AngleX)"));                    Storyboard.Children.Add(DA_SkewTransform_X);                }                Storyboard.Children.Remove(DA_SkewTransform_Y);                {                    Storyboard.SetTarget(DA_SkewTransform_Y, UI);                    Storyboard.SetTargetProperty(DA_SkewTransform_Y,                        new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[1].(SkewTransform.AngleY)"));                    Storyboard.Children.Add(DA_SkewTransform_Y);                }                #endregion

                    #region 旋转处理                Storyboard.Children.Remove(DA_RotateTransform);                {                    Storyboard.SetTarget(DA_RotateTransform, UI);                    Storyboard.SetTargetProperty(DA_RotateTransform,                        new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"));                    Storyboard.Children.Add(DA_RotateTransform);                }                #endregion

                    #region 移动处理                Storyboard.Children.Remove(DA_TranslateTransform_X);                {                    Storyboard.SetTarget(DA_TranslateTransform_X, UI);                    Storyboard.SetTargetProperty(DA_TranslateTransform_X,                        new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"));                    Storyboard.Children.Add(DA_TranslateTransform_X);                }                Storyboard.Children.Remove(DA_TranslateTransform_Y);                {                    Storyboard.SetTarget(DA_TranslateTransform_Y, UI);                    Storyboard.SetTargetProperty(DA_TranslateTransform_Y,                        new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)"));                    Storyboard.Children.Add(DA_TranslateTransform_Y);                }                #endregion

                    #region 翻转处理                Storyboard.Children.Remove(DA_CompositeTransform_X);                {                    Storyboard.SetTarget(DA_CompositeTransform_X, UI);                    Storyboard.SetTargetProperty(DA_CompositeTransform_X,                        new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[4].(CompositeTransform.ScaleX)"));                    Storyboard.Children.Add(DA_CompositeTransform_X);                }                Storyboard.Children.Remove(DA_CompositeTransform_Y);                {                    Storyboard.SetTarget(DA_CompositeTransform_Y, UI);                    Storyboard.SetTargetProperty(DA_CompositeTransform_Y,                        new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[4].(CompositeTransform.ScaleY)"));                    Storyboard.Children.Add(DA_CompositeTransform_Y);                }                #endregion

                    #region 是否产生投影效果                _Effect = UI.Effect;                if (DropShadowEffect.IsEnabled)                {                    UI.Effect = DropShadowEffect.DropShadowEffect;                }                #endregion

                    #endregion

                    Storyboard.Begin();                Storyboard.Completed += new EventHandler(Storyboard_Completed);            }            return Storyboard;        }

            private void Storyboard_Completed(object sender, EventArgs e)        {            if (this.Completed != null)            {                this.Completed(this.UI, sender, e);            }        }        #endregion    }    #endregion


    最新回复(0)