文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Silverlight 动画类的使用(转)

Silverlight 动画类的使用(转)

时间:2011-01-08  来源:slwf7man

 步骤1:定义动画类

 步骤2:定义静态类(添加扩展动画属性,扩展动画方法)

 步骤3:首先定义几个动画,这里使用静态类,看情况自己定,这样就可以实现,动画一次定义,多次使用,不同的多上都可以复用这个定义好的对象。

 步骤4:具体的使用

 

 

 步骤1:AnimationSL.cs

    /// <summary>
    /// 定义动画类
    /// </summary>
    #region 动画类

    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

 

 

 步骤2:MethodExtendClasses.cs

 public static class MethodExtendClasses
    {

        /// <summary>
        /// FrameworkElement扩展动画属性
        /// </summary>
        public static DependencyProperty AnimationSL = DependencyProperty.Register("Animation", typeof(List<AnimationSL>), typeof(FrameworkElement), new PropertyMetadata(null));


        /// <summary>
        /// FrameworkElement扩展动画方法
        /// </summary>
        /// <param name="UI">FrameworkElement对象</param>
        /// <returns></returns>
        public static List<AnimationSL> Animation(this FrameworkElement UI)
        {
            List<AnimationSL> _Animation = new List<AnimationSL>();
            if (UI.GetValue(AnimationSL) == null)
            {
                UI.SetValue(AnimationSL, _Animation);
            }
            _Animation = UI.GetValue(AnimationSL) as List<AnimationSL>;
            foreach (AnimationSL animation in _Animation)
            {
                animation.UI = UI;
            }

            return _Animation;
        }
    }

 

 

 步骤3:MainPage.xaml.cs

         /// <summary>
        /// 水平翻转360度
        /// </summary>
        public static AnimationSL InverHorizontal
        {
            get
            {
                AnimationSL _Animation = new AnimationSL();
                _Animation.DropShadowEffect.IsEnabled = true;
                _Animation.RenderTransformOrigin.AddCenter(0.5, 0.5, 0);
                _Animation.CompositeTransform.AddScaleX(-1, 0);
                _Animation.CompositeTransform.AddScaleX(1, 500);
                return _Animation;
            }
        }

        /// <summary>
        /// 垂直翻转360度
        /// </summary>
        public static AnimationSL InvertVertical
        {
            get
            {
                AnimationSL _Animation = new AnimationSL();
                _Animation.RenderTransformOrigin.AddCenter(0.5, 0.5, 0);
                _Animation.CompositeTransform.AddScaleY(-1, 0);
                _Animation.CompositeTransform.AddScaleY(1, 500);
                _Animation.DropShadowEffect.IsEnabled = false;
                return _Animation;
            }
        }

        /// <summary>
        /// 震动弹出
        /// </summary>
        public static AnimationSL Pop_Shock
        {
            get
            {
                AnimationSL _Animation = new AnimationSL();
                _Animation.RenderTransformOrigin.AddCenter(0.5, 0.5, 0);
                _Animation.ScaleTransform.AddScaleX(0, 0);
                _Animation.ScaleTransform.AddScaleY(0, 0);
                _Animation.ScaleTransform.AddScaleX(3, 100);
                _Animation.ScaleTransform.AddScaleY(3, 100);
                _Animation.ScaleTransform.AddScaleX(1, 300);
                _Animation.ScaleTransform.AddScaleY(1, 300);
                return _Animation;
            }
        }

 

步骤4:MainPage.xaml.cs

 

 private void Button_Click1(object sender, RoutedEventArgs e)
        {
            rectangle.Animation().Add(InverHorizontal);
           
            rectangle.Animation()[0].Begin();
        }

        private void Button_Click2(object sender, RoutedEventArgs e)
        {
            rectangle.Animation().Add(InvertVertical);
            rectangle.Animation()[1].Begin();
        }

        private void Button_Click3(object sender, RoutedEventArgs e)
        {
            rectangle.Animation().Add(Pop_Shock);
            rectangle.Animation()[2].Begin();
        }

 

 

相关阅读 更多 +
排行榜 更多 +
全民飞机空战手机版

全民飞机空战手机版

飞行射击 下载
弗拉格职业射手手机版

弗拉格职业射手手机版

飞行射击 下载
反射单元2

反射单元2

飞行射击 下载