天天看點

WPF動畫制作個人總結

此文章僅作為個人筆記,友善日後遺忘檢視

一、使用動畫的一些注意事項

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

WPF

繼續閱讀