Shuxia Ning
2024-11-19 a01861a95ede48fa4979a47b24f21616e362e534
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
namespace Yw.WinFrmUI
{
    /// <summary>
    /// 特效拓展类-对dev控件TransitionManager的封装
    /// </summary>
    public static class AnimationHelper
    {
 
        /// <summary>
        /// 利用属性获取特效管理器
        /// </summary>
        public static TransitionManager TransitionMgr
        {
            get
            {
                if (_transitionMgr == null)
                {
                    lock (_locker)
                    {
                        if (_transitionMgr == null)
                        {
                            _transitionMgr = new TransitionManager();
                        }
                    }
                }
                return _transitionMgr;
            }
        }
        private static TransitionManager _transitionMgr = null;// 定义一个静态变量来保存类的实例
        private static readonly object _locker = new();// 定义一个标识确保线程同步
 
        /// <summary>
        /// 创建滑行特效,四种效果—上下左右
        /// </summary>
        /// <param name="ctrl">需要创建特效的控件</param>
        /// <param name="ani">ePushEffectOptions 特效方向-上下左右</param>
        /// <param name="frameInterVal">时间间隔-默认3000</param>
        /// <param name="showWaitingIndicator">是否显示等待-默认不显示</param>
        public static void CreateSlideFadeAnimation(this Control ctrl, ePushEffectOptions ani, int? frameInterVal = 3000, bool showWaitingIndicator = false)
        {
            TransitionMgr.ShowWaitingIndicator = showWaitingIndicator;
 
            var slideFade = new SlideFadeTransition();
            slideFade.Parameters.EffectOptions = (PushEffectOptions)((int)ani);
            slideFade.Parameters.FrameInterval = frameInterVal;
 
            var transition = new Transition();
            transition.TransitionType = slideFade;
            transition.Control = ctrl;
 
            TransitionMgr.Transitions.Clear();
            TransitionMgr.Transitions.Add(transition);
        }
 
        /// <summary>
        /// 创建推动特效,四种效果-上下左右
        /// </summary>
        /// <param name="ctrl">需要创建特效的控件</param>
        /// <param name="ani">ePushEffectOptions 特效方向-上下左右</param>
        /// <param name="frameInterVal">时间间隔-默认3000</param>
        /// <param name="showWaitingIndicator">是否显示等待-默认不显示</param>
        public static void CreatePushAnimation(this Control ctrl, ePushEffectOptions ani, int? frameInterVal = 3000, bool showWaitingIndicator = false)
        {
            TransitionMgr.ShowWaitingIndicator = showWaitingIndicator;
 
            var push = new PushTransition();
            push.Parameters.EffectOptions = (PushEffectOptions)((int)ani);
            push.Parameters.FrameInterval = frameInterVal;
 
            var transition = new Transition();
            transition.TransitionType = push;
            transition.Control = ctrl;
 
            TransitionMgr.Transitions.Clear();
            TransitionMgr.Transitions.Add(transition);
        }
 
        /// <summary>
        /// 创建花斑特效
        /// </summary>
        /// <param name="ctrl">需要创建特效的控件</param>
        /// <param name="frameInterVal">时间间隔-默认3000</param>
        /// <param name="showWaitingIndicator">是否显示等待-默认不显示</param>
        public static void CreateDissolveAnimation(this Control ctrl, int? frameInterVal = 3000, bool showWaitingIndicator = false)
        {
            TransitionMgr.ShowWaitingIndicator = showWaitingIndicator;
 
            var dissolve = new DissolveTransition();
            dissolve.Parameters.FrameInterval = frameInterVal;
 
            var transition = new Transition();
            transition.TransitionType = dissolve;
            transition.Control = ctrl;
 
            TransitionMgr.Transitions.Clear();
            TransitionMgr.Transitions.Add(transition);
        }
 
        /// <summary>
        /// 创建形状特效
        /// </summary>
        /// <param name="ctrl">需要创建特效的控件</param>
        /// <param name="ani">eShapeEffectOptions</param>
        /// <param name="frameInterVal">时间间隔-默认3000</param>
        /// <param name="showWaitingIndicator">是否显示等待-默认不显示</param>
        public static void CreateShapeAnimation(this Control ctrl, eShapeEffectOptions ani, int? frameInterVal = 3000, bool showWaitingIndicator = false)
        {
            TransitionMgr.ShowWaitingIndicator = showWaitingIndicator;
 
            var shape = new ShapeTransition();
            shape.Parameters.FrameInterval = frameInterVal;
            shape.Parameters.EffectOptions = (ShapeEffectOptions)((int)ani);
 
            var transition = new Transition();
            transition.TransitionType = shape;
            transition.Control = ctrl;
 
            TransitionMgr.Transitions.Clear();
            TransitionMgr.Transitions.Add(transition);
        }
 
        /// <summary>
        /// 创建简单小特效
        /// <param name="ctrl">需要创建特效的控件</param>
        /// <param name="frameInterVal">时间间隔-默认3000</param>
        /// <param name="showWaitingIndicator">是否显示等待-默认不显示</param>
        public static void CreateFadeAnimation(this Control ctrl, int? frameInterVal = 3000, bool showWaitingIndicator = false)
        {
            TransitionMgr.ShowWaitingIndicator = showWaitingIndicator;
 
            var fade = new FadeTransition();
            fade.Parameters.FrameInterval = frameInterVal;
 
            var transition = new Transition();
            transition.TransitionType = fade;
            transition.Control = ctrl;
 
            TransitionMgr.Transitions.Clear();
            TransitionMgr.Transitions.Add(transition);
        }
 
        /// <summary>
        /// 创建时钟特效
        /// </summary>
        /// <param name="ctrl">需要创建特效的控件</param>
        /// <param name="ani">eClockEffectOptions</param>
        /// <param name="frameInterVal">时间间隔-默认3000</param>
        /// <param name="showWaitingIndicator">是否显示等待-默认不显示</param>
        public static void CreateClockAnimation(this Control ctrl, eClockEffectOptions ani, int? frameInterVal = 3000, bool showWaitingIndicator = false)
        {
            TransitionMgr.ShowWaitingIndicator = showWaitingIndicator;
 
            var clock = new ClockTransition();
            clock.Parameters.FrameInterval = frameInterVal;
            clock.Parameters.EffectOptions = (ClockEffectOptions)((int)ani);
 
            var transition = new Transition();
            transition.TransitionType = clock;
            transition.Control = ctrl;
 
            TransitionMgr.Transitions.Clear();
            TransitionMgr.Transitions.Add(transition);
        }
 
        /// <summary>
        /// 创建覆盖特效
        /// </summary>
        /// <param name="ctrl">需要创建特效的控件</param>
        /// <param name="ani">eCoverEffectOptions</param>
        /// <param name="frameInterVal">时间间隔-默认3000</param>
        /// <param name="showWaitingIndicator">是否显示等待-默认不显示</param>
        public static void CreateCoverAnimation(this Control ctrl, eCoverEffectOptions ani, int? frameInterVal = 3000, bool showWaitingIndicator = false)
        {
            TransitionMgr.ShowWaitingIndicator = showWaitingIndicator;
 
            var cover = new CoverTransition();
            cover.Parameters.FrameInterval = frameInterVal;
            cover.Parameters.EffectOptions = (CoverEffectOptions)((int)ani);
 
            var transition = new Transition();
            transition.TransitionType = cover;
            transition.Control = ctrl;
 
            TransitionMgr.Transitions.Clear();
            TransitionMgr.Transitions.Add(transition);
        }
 
        /// <summary>
        /// 创建Comb特效
        /// <param name="ctrl">需要创建特效的控件</param>
        /// <param name="frameInterVal">时间间隔-默认3000</param>
        /// <param name="showWaitingIndicator">是否显示等待-默认不显示</param>
        public static void CreateCombAnimation(this Control ctrl, int? frameInterVal = 3000, bool showWaitingIndicator = false)
        {
            TransitionMgr.ShowWaitingIndicator = showWaitingIndicator;
 
            var comb = new CombTransition();
            comb.Parameters.FrameInterval = frameInterVal;
 
            var transition = new Transition();
            transition.TransitionType = comb;
            transition.Control = ctrl;
 
            TransitionMgr.Transitions.Clear();
            TransitionMgr.Transitions.Add(transition);
        }
 
        /// <summary>
        /// 开始特效
        /// </summary>
        /// <param name="ctrl"></param>
        public static void StartAnimation(this Control ctrl)
        {
            TransitionMgr.StartTransition(ctrl);
        }
 
        /// <summary>
        /// 结束特效
        /// </summary>
        /// <param name="ctrl"></param>
        public static void EndAnimation(this Control ctrl)
        {
            TransitionMgr.EndTransition();
        }
 
 
 
    }
}