Раскадровка нескольких объектов с помощью метода SetTarget не работает

может кто-нибудь помочь мне попытаться выяснить, почему это не работает.

переменная brushes содержит предварительно заполненный список кистей. Если я попытаюсь применить 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();

этот код просто ничего не делает (что я могу видеть...).

спасибо!!

Edit: все еще не уверен, что проблема с методом SetTarget, либо ошибка, либо я просто не использую, как должно быть. В любом случае я решил проблему, создав уникальные имена для моих кистей во время выполнения и используя метод SetTargetName.

еще раз спасибо за все предложения.

1 ответов


попробуйте использовать раскадровка.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);

помните, что в этом случае вы также должны установить Namescope в качестве параметра Storyboard.Begin метод.

Читайте также: другие ответы на Stackoverflow.