此文章僅作為個人筆記,友善日後遺忘檢視
一、使用動畫的一些注意事項
1、(From)To和By都可以控制動畫移動,但當To和By同時有值時,會優先以To為動畫結束的目标參數
2、FillBehavior為Stop,表示動畫結束後解綁屬性,解綁的同時會還原動畫前屬性的原始值
3、BeginTime隻能在動畫第一遍開始時加延遲,如果是持續循環的動畫,則第二遍以後不會再有延遲(若要在循環動畫中使用延遲,可以考慮用關鍵幀動畫)
4、在Style中建立的動畫,不能夠使用Completed事件
5、同樣在Style中建立的動畫,From、To等屬性不能使用Binding
6、(想起來了再添加)
二、背景代碼建立動畫的方法
1、屬性直接綁定動畫
UIElement.BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior);
或
UIElement.ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior);
注意最後一個參數:
預設為SnapshotAndReplace,表示每當給這個屬性綁定動畫,都會替換之前的動畫,無論是否執行結束;
另一個取值Compose,則表示将此動畫添加到上一個動畫的結尾,相當于拼接成一條時間線
2、用故事版形式
(這裡加一段代碼予以說明)
private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
{
Storyboard storyboard = new Storyboard();
DoubleAnimation doubleAnimation = new DoubleAnimation
{
Duration = TimeSpan.FromSeconds(1),
From = -200,
To = -100,
FillBehavior = FillBehavior.Stop,
EasingFunction = new ElasticEase()
{
EasingMode = EasingMode.EaseOut,
Springiness = 6,
Oscillations = 3
}
};
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Grid.RenderTransform).(TranslateTransform.Y)"));
storyboard.Children.Add(doubleAnimation);
storyboard.Completed += pullSb_Completed;
storyboard.Begin(topBar, HandoffBehavior.SnapshotAndReplace, true);
}
private void Storyboard_Completed(object sender, EventArgs e)
{
TranslateTransform translate = grid.RenderTransform as TranslateTransform;
translate.Y = -100;
}
之是以在動畫完成事件中再給元素屬性賦目标值,是為了保留動畫完成後的狀态,因為FillBehavior = FillBehavior.Stop