Несколько анимаций в раскадровке одновременно? - PullRequest
1 голос
/ 23 сентября 2010

Я создал несколько ColorAnimations и хочу, чтобы они запускались одновременно (не имеет значения, запускаются ли они синхронизированно).К сожалению, только один из них бежит.

       storyboard = new Storyboard();

        //Animation Auditorium
        ColorAnimation SpotLightAnimation = new ColorAnimation();
        SpotLightAnimation.To = Color.FromArgb(1, Convert.ToByte(random.Next(0, 255)), Convert.ToByte(random.Next(0, 255)), Convert.ToByte(random.Next(0, 255)));
        SpotLightAnimation.Duration = TimeSpan.FromSeconds(3);
        SpotLightAnimation.Completed += new EventHandler(storyboard_Completed);

        this.RegisterName("MySpotlight", karte.SpotLightAuditorium);
        Storyboard.SetTargetName(SpotLightAnimation, "MySpotlight");
        Storyboard.SetTargetProperty(SpotLightAnimation, new PropertyPath(SpotLight.ColorProperty));

        storyboard.Children.Add(SpotLightAnimation);


        //Animation Wohnzimmer
        ColorAnimation SpotLightWohnzimmerAnimation = new ColorAnimation();
        SpotLightWohnzimmerAnimation.To = Color.FromArgb(1, Convert.ToByte(random.Next(0, 255)), Convert.ToByte(random.Next(0, 255)), Convert.ToByte(random.Next(0, 255)));
        SpotLightWohnzimmerAnimation.Duration = TimeSpan.FromSeconds(3);
        SpotLightAnimation.Completed += new EventHandler(storyboard_Completed);

        this.RegisterName("MySpotLightWonzimmer", karte.SpotLightWohnzimmer);
        Storyboard.SetTargetName(SpotLightWohnzimmerAnimation, "MySpotLightWonzimmer");
        Storyboard.SetTargetProperty(SpotLightWohnzimmerAnimation, new PropertyPath(SpotLight.ColorProperty));

        storyboard.Children.Add(SpotLightWohnzimmerAnimation);

        storyboard.Begin(this);


    }

    void storyboard_Completed(object sender, EventArgs e)
    {
        (storyboard.Children[0] as ColorAnimation).To = Color.FromArgb(1, Convert.ToByte(random.Next(0, 255)), Convert.ToByte(random.Next(0, 255)), Convert.ToByte(random.Next(0, 255)));
        storyboard.Begin(this);
    }

Ответы [ 2 ]

2 голосов
/ 23 сентября 2010

Не могли бы вы предоставить больше информации?Кроме того, есть ли причина, по которой вы объявляете эту раскадровку из C #?Обычно, когда я прохожу анимацию нескольких цветовых свойств, я делаю что-то похожее на следующее:

           <Storyboard x:Name="MyCoolStoryboard">

          <ColorAnimation 
            Storyboard.TargetName="ThingIwantToAnimate"
            Storyboard.TargetProperty="Color"
            From="Blue" To="Red" Duration="0:0:1" />
          <ColorAnimation 
            Storyboard.TargetName="ThingIwantToAnimate2"
            Storyboard.TargetProperty="Color"
            From="Blue" To="Red" Duration="0:0:1" /> 
          <ColorAnimation 
            Storyboard.TargetName="ThingIwantToAnimate3"
            Storyboard.TargetProperty="Color"
            From="Blue" To="Red" Duration="0:0:1" /> 
          <ColorAnimation 
            Storyboard.TargetName="ThingIwantToAnimate4"
            Storyboard.TargetProperty="Color"
            From="Blue" To="Red" Duration="0:0:1" /> 
        </Storyboard>

И поскольку вы включили имя x: Name в storyborad, вы всегда можете выбрать его запуск из кода C #собирается:

Раскадровка sb = this.FindResource ("MyCoolStoryboard") как Раскадровка;sb.Begin ();

1 голос
/ 23 сентября 2010

Новый ответ:

Я думаю, что ранее запущенная анимация может мешать, и вы можете попробовать это:

  1. Каждый раз повторно использует одну и ту же раскадровку, но останавливает ранее запущенную анимацию и очищает ее потомки,
  2. Запустите анимацию с помощью приведенного ниже фрагмента:

    this.BeginStoryboard (stboard, HandoffBehavior.SnapshotAndReplace, true);

В противном случае каждая анимация работает отдельно?

Также я замечаю, что вы подписываетесь на каждую завершенную анимацию, а не только на раскадровку: почему?


Старый ответ:

Здравствуйте,

Можете ли вы предоставить весь код? Также: SpotLightWohnzimmerAnimation является именем класса или экземпляром?

Обычно я запускаю анимацию из кода: http://blog.lexique -du-net.com / index.php? Post / 2009/07/07 / CREATE% 2C-LAUNCH-and-CONTROL-a- WPF-анимация-FROM-CODE

@ Брэндон: Я думаю, что он анимирует что-то, не объявленное в его XAML, как прожектор ... А создание анимации позволяет вам более гибко настраивать все параметры во время выполнения, а не во время разработки ... 1.

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