c# – 如何使故事板淡入,暂停,然后淡出(通过代码)?

我写了以下代码.它尝试创建一个执行以下操作的故事板:

>淡入500毫秒
>暂停1000ms
>淡出500毫秒

但是在运行时获取System.InvalidOperationException,后跟以下输出:

Additional information: Multiple animations in 
  the same containing Storyboard cannot target the
  same property on a single element.

这似乎表明它试图一次完成所有动画,而不是顺序完成.

private Storyboard createStoryboard()
{
  Storyboard board = new Storyboard();

  addFadeToStoryboard(board, 0, 1, 500);
  addFadeToStoryboard(board, 1, 1, 1000);

  DoubleAnimation fadeOut = addFadeToStoryboard(board, 1, 0, 500);

  fadeOut.Completed += new EventHandler(onFadeCompleted);

  Storyboard.SetTarget(board, this);

  return board;
}

private DoubleAnimation addFadeToStoryboard(Storyboard board, 
  double fadeFrom, double fadeTo, double milliseconds)
{
  DoubleAnimation fade = new DoubleAnimation()
  {
    Duration = new Duration(TimeSpan.FromMilliseconds(milliseconds)),
    From = fadeFrom,
    To = fadeTo,
    RepeatBehavior = new RepeatBehavior(1)
  };

  Storyboard.SetTargetProperty(fade,
    new PropertyPath(UIElement.OpacityProperty));

  board.Children.Add(fade);

  return fade;
}

我怎样才能顺序完成?我是否误解了故事板的基本内容?

谢谢

解决方法:

如果故事板包含多个动画,则它们全部同时启动并同时运行.您可以将DoubleAnimations上的BeginTime属性设置为TimeSpan以指示它们应该何时开始…因此,通过传入所有先前动画的累积时间,您应该能够获得顺序效果.

编辑:对不起 – 我刚刚注意到Silverlight标签.我的答案适用于WPF …我不知道Silverlight和WPF动画之间的区别.

This可能有所帮助.它看起来像是WPF和Silverlight之间的区别. WPF可以在同一个故事板中处理不同动画上的相同属性的动画,而Silverlight则不然.他们建议使用单个DoubleAnimationUsingKeyFrames而不是单独的DoubleAnimations …然后每个单独的动画成为其中的关键帧,它应该在它们之间线性动画.

相关文章

如何在Silverlight4(XAML)中绑定IsEnabled属性?我试过简单的...
我正在编写我的第一个vb.net应用程序(但我也会在这里标记c#,...
ProcessFile()是在UIThread上运行还是在单独的线程上运行.如...
我从同行那里听说,对sharepoint的了解对职业生涯有益.我们不...
我正在尝试保存一个类我的类对象的集合.我收到一个错误说明:...
我需要根据Silverlight中的某些配置值设置给定控件的Style.我...