Раскадровка нескольких объектов с помощью метода 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.