2

C#でアニメーションを作成する方法を学んでいます。たとえば、オブジェクトのマージンをアニメーション化する場合は、次のメソッドを使用してそのマージンをアニメーション化します。

test(someObject, FrameworkElement.MarginProperty);

/// <summary>
/// animate margin of an object
/// </summary>
/// <param name="target">what object do you whant to animate?</param>
/// <param name="property">what property do you want to animate</param>
public void test(DependencyObject target, DependencyProperty property)
{
    ThicknessAnimation animation = new ThicknessAnimation();
    animation.To = new Thickness(0,0,0,0);   // final value

    //animation.From = new Thickness(50,50,50,50);

    //make animation last 5 seconds
    animation.BeginTime = TimeSpan.FromSeconds(0);
    animation.Duration = TimeSpan.FromSeconds(5);

    // set the ease function
    BounceEase b = new BounceEase();
    animation.EasingFunction = b;

    //note that I would like to add an easeIn function

    //start animating
    Storyboard.SetTarget(animation, target);  // what object will be animated?
    Storyboard.SetTargetProperty(animation, new PropertyPath(property)); // what property will be animated
    Storyboard sb = new Storyboard();
    sb.Children.Add(animation);
    sb.Begin();
}

イーズ関数を作成できることに注意してください。しかし、EaseInOut イージング関数を作成したい場合はどうすればよいでしょうか。EaseInOut アプローチを使用してオブジェクトをアニメーション化するには、テスト メソッドに何を追加する必要がありますか。

4

1 に答える 1

4

オブジェクトのマージンをアニメーション化するために、ようやくメソッドが機能するようになったと思います。

MyStoryboards.Animations a = new MyStoryboards.Animations();

// set the ease function
BounceEase b = new BounceEase();
b.Bounces = 5;
b.Bounciness = 1;
b.EasingMode = EasingMode.EaseIn;

a.animThickness(tv, FrameworkElement.MarginProperty, tv.Margin, new Thickness(), TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(5), b);

..。

..。

public void animThickness(DependencyObject target, DependencyProperty property, Thickness from, Thickness to, TimeSpan beginTime, TimeSpan duration , IEasingFunction e)
{
    ThicknessAnimation animation = new ThicknessAnimation();
    animation.To = to;   // final value

    animation.From = from;

    animation.BeginTime = beginTime;
    animation.Duration = duration;

    animation.EasingFunction = e;

    //start animating
    Storyboard.SetTarget(animation, target);  // what object will be animated?
    Storyboard.SetTargetProperty(animation, new PropertyPath(property)); // what property will be animated
    Storyboard sb = new Storyboard();
    sb.Children.Add(animation);
    sb.Begin();
}
于 2011-08-08T21:09:20.053 に答える