Repeatbehavior不会使动画正确结束

时间:2016-04-13 05:54:54

标签: xaml animation win-universal-app

我在UWP应用程序中有一个coloranimation来动画TextBox的背景:

        animation = new ColorAnimation();
        animation.Duration = TimeSpan.FromMilliseconds(600);
        animation.From = Colors.White;
        animation.To = Color.FromArgb(255, 40, 40, 40);
        animation.RepeatBehavior = new RepeatBehavior(2);

        flashStoryBoard = new Storyboard();
        flashStoryBoard.Children.Add(animation);

        Storyboard.SetTarget(animation, MyBox);
        Storyboard.SetTargetProperty(animation, "(Panel.Background).(SolidColorBrush.Color)");

当我运行上面的动画时,动画结束于具有白色背景颜色的TextBox,而不是预期的默认值(暗40,40,40色......)。当我删除repeatbehavior时,动画运行得很好但当然只有一次。没有应用缓动功能。当我将fillbehavior设置为停止时,我会在动画结束时获得闪烁效果。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  

当我运行上面的动画时,动画结束于具有白色背景颜色的TextBox,而不是预期的默认值(暗40,40,40色......)。

我无法重现这个问题,在我身边它以“FF404040”的颜色结束。也许您可以创建一个新的空白项目并再次尝试发布的代码。或者您可以与我们分享您的样本。

  

当我将fillbehavior设置为停止时,我会在动画结束时获得闪烁效果。

我认为您在加载TextBox时尝试将TextBox的背景从白色变为深灰色两次,但是当设置RepeatBehavior等于或超过两次时,它最终会很快闪烁一次。

我找到了这种情况的解决方法,它使动画以“FF404040”颜色结束,最后不会闪烁:

Storyboard flashStoryBoard = new Storyboard();
ColorAnimation animation = new ColorAnimation();
animation.Duration = TimeSpan.FromMilliseconds(600);
animation.To = Colors.White;
animation.From = Color.FromArgb(255, 40, 40, 40);
animation.RepeatBehavior = new RepeatBehavior(2);
animation.AutoReverse = true;
flashStoryBoard.Children.Add(animation);
Storyboard.SetTarget(animation, MyBox);
Storyboard.SetTargetProperty(animation, "(Panel.Background).(SolidColorBrush.Color)");
flashStoryBoard.Begin();

正如您在我的代码中看到的,我交换了animation.Toanimation.From,并将AutoReverse属性设置为true。由于你的动画Duration只有0.6秒,我认为这种方法不会影响用户体验并且可以解决闪烁问题。