2010-03-19 3 views
1

У меня есть приложение, которое делает некоторые тяжелые вещи, когда пользователь нажимает кнопку запуска и занимает много времени. Во время этого я хотел бы сделать некоторую анимацию над меткой, например, изменяя непрозрачность от 0 до 1 и наоборот и меняя цвет переднего плана между несколькими цветами, в то же время изменяя непрозрачность. Я хочу, чтобы он переставал делать анимацию, когда работник фона заканчивает свою работу. Как я могу это сделать? и как я могу начать анимацию и остановить ее из C#?wpf do animation до тех пор, пока работник не закончит свою работу

Большое спасибо!

ответ

2

Ваши анимации будут размещены в Раскадровке.

  • Чтобы анимация выполнялась неограниченно, установите RepeatBehavior для раскадровки навсегда.
  • Чтобы начать анимацию при запуске BackgroundWorker, вызовите метод Storyboard.Begin.
  • Чтобы остановить анимацию при завершении BackgroundWorker в обработчике событий RunWorkerCompleted, вызовите метод Storyboard.Stop.

Вот пример:

<Window.Resources> 
    <Storyboard x:Key="sb" Duration="0:0:2" RepeatBehavior="Forever"> 
    <DoubleAnimation Storyboard.TargetName="l" 
        Storyboard.TargetProperty="Opacity" 
        From="1" To="0" AutoReverse="True" /> 
    <ColorAnimation Storyboard.TargetName="l" 
        Storyboard.TargetProperty="Foreground.Color" 
        From="HotPink" To="Lime" AutoReverse="True" /> 
    </Storyboard> 
</Window.Resources> 

<StackPanel> 
    <Label Name="l" FontSize="72">Oh noes!</Label> 
    <Button Click="Button_Click">Animate me!</Button> 
</StackPanel> 

И обработчик Button_Click:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    ((Storyboard)(FindResource("sb"))).Begin(); 
    // and kick off your BackgroundWorker 
} 
+0

спасибо очень много, но не могли бы вы опубликовать фрагмент кода в XAML о том, как внедрение раскадровки (с кодом repeatbehaviour навсегда) с анимацией для непрозрачности и цвета переднего плана? Я новичок в xaml, извините. – toni

+0

Добавленный пример - не большой стиль, но вы должны начать! – itowlson

+0

Большое спасибо, отличный пример. Одна вещь, я слышал, что можно сделать последовательность анимаций, например, в этом случае сначала сделать анимацию непрозрачности, а когда она закончится, запустите анимацию переднего плана. Если бы я захотел сделать это, какую модификацию мне пришлось бы сделать в раскадровке, чтобы начать анимацию переднего плана только в конце анимации непрозрачности (а не раньше или в то же время)? Огромное спасибо. – toni

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