2012-04-18 7 views
6

Я создаю несколько пользовательских элементов управления в панели обертки. У меня есть модель представления, связанная с usercontrol, и у меня есть анимация, вызванная свойством в модели представления. Очень простой переключение цвета с красного на прозрачный, чтобы имитировать мигание.Как синхронизировать анимацию через usercontrols в WPF

<Storyboard x:Key="alertAnimation" RepeatBehavior="Forever" AutoReverse="True" > 
    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" 
            Storyboard.TargetName="TileBorder" 
            BeginTime="00:00:00" 
            RepeatBehavior="Forever" 
            AutoReverse="True" 
            > 
     <DiscreteColorKeyFrame Value="Red"/> 
     <DiscreteColorKeyFrame KeyTime="00:00:00.500" Value="Transparent" /> 
    </ColorAnimationUsingKeyFrames> 

</Storyboard> 

Это работает просто отлично. Однако, поскольку я загружаю несколько пользовательских элементов асинхронно, мигающие анимации не синхронизируются, поэтому все они мигают в разное время. Теперь есть требование, чтобы все мигание на экране должно было все мигать с одинаковой скоростью/временем. Есть ли способ синхронизации этих анимаций? Кажется, я не могу найти пример, который подходит для того, что я пытаюсь выполнить. Есть ли способ использовать ParallelTimeline, добавить в него все анимации и запустить/остановить их с одного контроллера? Любые примеры, как это сделать?

EDIT 4/20 Было бы лучше, если анимация определена в файле style.xaml и иметь «глобальную» раскадровку, в которой каждый элемент управления добавляет свою «мигающую» анимацию и имеет основной пользовательский интерфейс для раскадровки?

+0

Зачем вам загружать элементы управления asynch? – Paparazzi

+0

Действительно для взглядов. Я обнаружил, что если я загрузил их синхронно, тогда приложение оказалось зависающим, пока не будут загружены все элементы управления. Кроме того, как только все начальные пользовательские элементы управления загружаются, еще один может появиться в любое время, когда устройство, которое оно представляет, приходит в Интернет. Я подумал, что мне нужно решить этот случай. – mdutra

+0

Кажется, простая анимация, но я бы попробовал дискретно над ключевым фреймом. – Paparazzi

ответ

0

Очевидно, что это нужно будет изменить, но попытка длительности 0 при переходе цвета может дать вам мигание с меньшими накладными расходами. И это не так. Просто что-то попробовать.

<Rectangle Name="MyRectangle" Width="100" Height="100"> 
     <Rectangle.Fill> 
      <SolidColorBrush x:Name="MySolidColorBrush" Color="Blue" /> 
     </Rectangle.Fill> 
     <Rectangle.Triggers> 
      <EventTrigger RoutedEvent="Rectangle.MouseEnter"> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation 
      Storyboard.TargetName="MyRectangle" 
      Storyboard.TargetProperty="Width" 
      From="100" To="200" Duration="0:0:1" /> 

         <ColorAnimation 
      Storyboard.TargetName="MySolidColorBrush" 
      Storyboard.TargetProperty="Color" 
      From="Blue" To="Red" BeginTime="0:0:1" Duration="0:0:0" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Rectangle.Triggers> 
    </Rectangle> 
3

я не мог найти хороший способ для управления несколько анимации на несколько UserControls, так что я заканчивал не с помощью анимации в UserControl, но вместо того, чтобы использовать анимацию, чтобы просто изменить DependencyProperty в статическом объекте и имею все UserControls что необходимо моргнуть каким-то образом привязать к этому свойству. Существуют различные способы для получения желаемых результатов, которые я хотел, но в конечном итоге теперь у меня есть способ для всех моих элементов управления знать, когда мигает, а затем выключается, так что все синхронизируется.

Я получил идею и примеры кода со следующего сайта: How to synchronize animations across usercontrols in wpf

Я сделал несколько изменений к нему, но в целом это было именно то, что мне нужно было это делать.

+0

Это то, что я собираюсь в данный момент. Я надеялся просто использовать анимацию. Ах хорошо. –

Смежные вопросы