wpf делает анимацию, пока фоновый работник не закончит свою работу - PullRequest
1 голос
/ 20 марта 2010

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

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

1 Ответ

2 голосов
/ 20 марта 2010

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

  • Чтобы анимация работала бесконечно, установите Повторить поведение Повествования в Forever.
  • Чтобы запустить анимацию при запуске 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
}
...