C# 使用SetTarget方法以多个对象为目标的情节提要不';行不通

C# 使用SetTarget方法以多个对象为目标的情节提要不';行不通,c#,wpf,animation,3d,C#,Wpf,Animation,3d,有人能帮我找出为什么这不起作用吗 笔刷变量包含预先填充的笔刷列表。 如果我尝试在迭代过程中直接应用BeginAnimation,那么效果很好。但是单独启动每个动画会有很大的开销 所以我试着把所有的动画放在一个故事板上,然后一次把它们全部放出来 var storyBoard = new Storyboard(); var duration = new Duration(TimeSpan.FromMilliseconds(time)); foreach (Brush 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方法有什么问题,可能是一个bug,也可能是我没有按应有的方式使用。无论如何,我解决了在运行时使用SetTargetName方法为画笔生成唯一名称的问题。

尝试使用方法而不是
故事板。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);
记住,在这种情况下,您还应该为
情节提要.Begin
方法设置一个as参数


另请参见:。

您是否应该路径选择包含笔刷的属性,然后选择笔刷不透明度?类似于
newpropertypath(((Shape.Fill)。(SolidColorBrush.Opacity)”)
然后你会在下一行看到更接近
StoryBoard.SetTarget(动画,这个)
?我充其量只是个初学者,但这似乎是问题的一部分。您希望更改对象上属性的笔刷,而不是将笔刷本身作为目标(我认为您无论如何都不能这样做)您提供的代码实际上可以工作。但是,在本例中,您有一个带有笔刷名称的字符串数组。在我的解决方案中,3D模型是从外部资源库加载的,我不能假设每个笔刷都有一个名称。无论如何,我现在正在使用您的解决方案,并在运行时为笔刷生成唯一的名称。同时,我可能会尝试找到一种为所有Visual3D组件生成名称的好方法。