Раскадровка, ориентированная на несколько объектов с использованием метода SetTarget, не работает - PullRequest
6 голосов
/ 17 февраля 2011

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

Переменная 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();

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

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

1 Ответ

2 голосов
/ 24 февраля 2011

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

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

См. Также: Другие ответы на Stackoverflow .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...