简介
这次的项目需求,需要做一个可以开关门的动画控件,并且可以旋转,而且要不能覆盖到背后的图
八年前学习Win32SDK的时候,自己就不是很喜欢用GDI来画图
这次就选择WPF来做!
C# Code
控件的旋转,我声明了一个DoorAngle属性,利用WPF的RenderTransform属性来旋转控件
开关门的动画部分,我同时使用了DoubleAnimation和ThinknessAnimation来达成门的开关效果
如果只是利用DoubleAnimation来控制Rectangle的Width的话,控件是会往中间缩小
所以要搭配ThinknessAnimation,修改Margin,让门在开启的时候固定在一个位置
使用到了两个动画,那就必须要使用StoryBoard來處理了
this.Dispatcher.BeginInvoke(new MethodInvoker(StartAnimiation), null);
我声明了一个DoorOpened属性,只要透过这个属性,就可以设定门的开关,并同时播放动画
但是由于项目的数据,会放在一个执行序中过更新的动作
所以透过Dispatcher呼叫StartAnimation,才可以正常运作
XAML
画面上,我声明了leftdoor和rightdoor, 利用两个Rectangle来做一个简单的门