Двойная анимация. Что такое TranslateTransform для определения ширины в C# UWP?

Я использую пример MSDN для настройки анимации ширины прямоугольника в C3 UWP. Вот код примера:

private void Create_And_Run_Animation()
    {

        // Create a red rectangle that will be the target
        // of the animation.
        Rectangle myRectangle = new Rectangle();
        myRectangle.Width = 0;
        myRectangle.Height = 20;
        SolidColorBrush myBrush = new SolidColorBrush(Colors.Yellow);
        myRectangle.Fill = myBrush;

        // Create the transform
        TranslateTransform stretchTransform = new TranslateTransform();
        stretchTransform.X = 0;
        stretchTransform.Y = 0;
        myRectangle.RenderTransform = stretchTransform;

        // Add the rectangle to the tree.
        DefaultLayout.Children.Add(myRectangle);
        myRectangle.Name = "myWidthAnimatedRectangle";
        // Create a duration of 2 seconds.
        Duration duration = new Duration(TimeSpan.FromSeconds(2));
        // Create two DoubleAnimations and set their properties.
        DoubleAnimation myDoubleAnimation = new DoubleAnimation();
        myDoubleAnimation.From = 0.0;

        myDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(3000));
        Storyboard justintimeStoryboard = new Storyboard();
        justintimeStoryboard.Duration = duration;
        justintimeStoryboard.Children.Add(myDoubleAnimation);

        Storyboard.SetTarget(myDoubleAnimation, stretchTransform);

        Storyboard.SetTargetName(myDoubleAnimation, myRectangle.Name);

        // Set the X  property of the Transform to be the target property

        Storyboard.SetTargetProperty(myDoubleAnimation, "X");
        myDoubleAnimation.To = 300.0;


        // Make the Storyboard a resource.
        DefaultLayout.Resources.Add("justintimeStoryboard", justintimeStoryboard);
        // Begin the animation.
        justintimeStoryboard.Begin();
    }

Однако в Build он перемещает объект, а не меняет его ширину. Мне нужно анимировать изменение ширины.

1 ответ

Однако в Build он перемещает объект, а не меняет его ширину. Мне нужно анимировать изменение ширины.

Ваш код был использован для анимации положения прямоугольника, а не его ширины. Вы можете указать значение по умолчанию для его ширины и анимировать его ScaleTransform.

Если вы должны использовать DoubleAnimation чтобы оживить его ширину, нужно установить EnableDependentAnimation к истине. Пожалуйста, проверьте следующий пример кода:

private void Create_And_Run_Animation()
{
    // Create a red rectangle that will be the target
    // of the animation.
    Rectangle myRectangle = new Rectangle();
    myRectangle.Width = 10;
    myRectangle.Height = 20;
    SolidColorBrush myBrush = new SolidColorBrush(Colors.Yellow);
    myRectangle.Fill = myBrush;

    // Add the rectangle to the tree.
    DefaultLayout.Children.Add(myRectangle);
    myRectangle.Name = "myWidthAnimatedRectangle";

    DoubleAnimation myDoubleAnimation = new DoubleAnimation();
    myDoubleAnimation.From = 0.0;
    myDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(3000));

    Storyboard justintimeStoryboard = new Storyboard();
    Storyboard.SetTargetProperty(myDoubleAnimation, "(Rectangle.Width)");
    Storyboard.SetTargetName(myDoubleAnimation, myRectangle.Name);

    myDoubleAnimation.To = 300.0;
    myDoubleAnimation.EnableDependentAnimation = true;
    justintimeStoryboard.Children.Add(myDoubleAnimation);

    // Make the Storyboard a resource.
    DefaultLayout.Resources.Add("justintimeStoryboard", justintimeStoryboard);
    // Begin the animation.
    justintimeStoryboard.Begin();
}
Другие вопросы по тегам