Как динамически создавать перевод / перемещение раскадровки с помощью кода? - PullRequest
2 голосов
/ 05 декабря 2011

Я пытаюсь создать следующую раскадровку в коде:

<Storyboard x:Name="m_activateIdentityStoryboard">
        <DoubleAnimationUsingKeyFrames 
            Storyboard.TargetProperty=
                  "(UIElement.RenderTransform).(CompositeTransform.TranslateY)" 
            Storyboard.TargetName="image">
            <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
            <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="-22"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>

Я пробовал следующее:

    Storyboard board = new Storyboard();
    Storyboard.SetTarget(board, view);
    Storyboard.SetTargetProperty(board,
      new PropertyPath(CompositeTransform.TranslateYProperty));

    DoubleAnimation upAnim = new DoubleAnimation()
    {
      Duration = new Duration(TimeSpan.FromMilliseconds(200)),
      From = 0,
      To = -22,
      RepeatBehavior = new RepeatBehavior(1)
    };
    board.Children.Add(upAnim);

Но это ничего не делает.Я почти уверен, что указал неправильный PropertyPath, но я не знаю, что я должен в него вставить, или даже как я должен исследовать, что в него вставить.Я также не понимаю, что означает "(UIElement.RenderTransform). (CompositeTransform.TranslateY)" и как его перевести на c #.

Спасибо!свиней

1 Ответ

4 голосов
/ 05 декабря 2011

Правильный код C # для вашей анимации должен выглядеть примерно так:

    // initialize a new instance of the CompositeTransform which allows you 
    // apply multiple different transforms to your image
    this.image.RenderTransform = new CompositeTransform();

    // create the timeline
    var animation = new DoubleAnimationUsingKeyFrames();
    // add key frames to the timeline
    animation.KeyFrames.Add(new EasingDoubleKeyFrame { KeyTime = TimeSpan.Zero, Value = 0 });
    animation.KeyFrames.Add(new EasingDoubleKeyFrame { KeyTime = TimeSpan.FromMilliseconds(200), Value = -22 });
    // notice the first parameter takes a timeline object not the storyboard itself
    Storyboard.SetTargetProperty(animation, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateY)"));
    Storyboard.SetTarget(animation, image);

    // create the storyboard
    var storyboard = new Storyboard() { RepeatBehavior = RepeatBehavior.Forever };
    // add the timeline to your storyboard
    storyboard.Children.Add(animation);

    // start the annimation
    storyboard.Begin();

Я добавил несколько комментариев, и, надеюсь, они имеют смысл для вас.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...