在WPF中可以很方便的實現動畫的效果,而在普通的WinForm程序里實現卻有點麻煩,這里我用一種模擬的方式來實現WinForm有關的動畫
回憶一下在WPF中動畫效果的實現,首先創建一個故事板 Storyboard,然后創建一個動畫 Animation,並把要產生動畫的屬性與Animation綁定后添加到故事板,最后執行,得到了我們想要的效果,這里我們只考慮線性的變化效果
這里我主要是用來改變WinForm上控件的大小位置來產生一些動畫的效果 。
一 StoryBoard 故事板
由於是要控制界面上的面板所以需要異步來改變界面控件的一些屬性 。而動畫效果需要一個定時器來循環的執行生成動畫的效果 。所以首先用Start函數來開啟一個線程,然后在線程sta()中開啟一個定時器用來執行相關的操作 這里我設定的定時器執行一次為8毫秒.
timeInt為一個靜態變量來作為計數器判斷定時器執行了多少次當執行完成的時候歸零。_control為構造函數里傳入的執行的面板控件 可以是一個Form或Control。然后讓
_control.BeginInvoke(new Sta(too));
通知界面改變。代碼如下
最后一步中循環執行的ControlAnimation用來保存動畫執行的相關信息
其中包括了動畫的效果animation 要綁定的控件 control 綁定控件的屬性值 我們看too()函數中利用
PropertyInfo value = tp.GetProperty(a.name);
if (value != null)
{
value.SetValue(a.control, a.animation.Change(), null);
}
來實現給屬性的賦值。
最后就是實現動畫 ,主要是保存起始值From 結束值To 所需要的事件Time這三個值,傳入這三個值后,求出需要變化的Num,實現每次變化Change()的值,
代碼如下:
這樣就簡單的完成了一個模擬動畫效果的類 :看看AnimationPoint類,只是用類兩個AnimationInt類來實現的,當然也可以用三個來實現一個Color類。。。
好我們來調用一下
看看我實現了一個控件的位置在200毫秒的時間位置向后移動了200和向移動200的位置。效果如下 :







