任何人都可以帮助我找出为什么这不起作用。
brush变量包含一个预先填充的画笔列表。
如果我尝试在迭代期间直接应用BeginAnimation
,它可以正常工作。但是每个动画分别开始有很大的开销......
所以我试图将所有动画放在一个故事板中,然后立即解雇所有动画......
var storyBoard = new Storyboard();
var duration = new Duration(TimeSpan.FromMilliseconds(time));
foreach (Brush brush in brushes)
{
var animation = new DoubleAnimation(toValue, duration);
storyBoard.Children.Add(animation);
Storyboard.SetTargetProperty(animation, new PropertyPath(Brush.OpacityProperty));
Storyboard.SetTarget(animation, brush);
}
storyBoard.Begin();
这段代码什么都不做(我可以看到......)。
谢谢!
编辑:仍然不确定SetTarget方法有什么问题,要么是错误,要么我只是不应该使用它。无论如何,我解决了在运行时使用SetTargetName方法为我的画笔生成唯一名称的问题。
再次感谢所有建议。
答案 0 :(得分:2)
尝试使用Storyboard.SettargetName方法而不是Storyboard.SetTarget
。我为你准备了工作样品:
var brushes = new string[] { "br1", "br2", "br3" };
var sb = new Storyboard();
var dur = new Duration(TimeSpan.FromMilliseconds(500.0));
double toValue = 1.0;
foreach (var brush in brushes)
{
var anim = new DoubleAnimation(toValue, dur);
Storyboard.SetTargetName(anim, brush);
Storyboard.SetTargetProperty(anim, new PropertyPath("(0)", new DependencyProperty[] { Brush.OpacityProperty }));
sb.Children.Add(anim);
}
sb.Begin(this);
请注意,在这种情况下,您还应该为Storyboard.Begin
方法设置Namescope参数。