2010-12-15 7 views
0

Mon application a quelques travailleurs de fond, chacun faisant un travail différent. Lorsque je clique sur le bouton 'Démarrer', tout le backgroundworker démarre simultanément.DataTrigger sur WPF Animation

dans mon XAML, j'avais défini mon animation d'une rotation de l'image:

<window.Resources> 
    <Storyboard x:Key="imageRotate"> 
     <DoubleAnimation Storyboard.TargetName="transRotate" 
       Storyboard.TargetProperty="(Image.RenderTransform).(RotateTransform.Angle)" 
       From="0" To="360" 
       Duration="0:0:0.5" 
       AutoReverse="False" 
       RepeatBehavior="Forever"/> 
    </Storyboard> 
</window.Resources> 

Je veux l'animation pour commencer quand tout le BackgroundWorker a commencé, et arrêter seulement après que tous les travailleurs de fond arrêté.

J'ai un appel propriété AreWorkersBusy:

private bool _areWorkerBusy; 
public bool AreWorkerBusy 
{ 
    get 
    { 
     return _areWorkerBusy; 
    } 
    set 
    { 
     bool isBusy = false; 
     foreach(BackgroundWorker worker in BackgroundWorkerList) 
     { 
      if(worker.IsBusy) 
       isBusy = true; 
     } 
     _areWorkerBusy = isBusy; 
    } 
} 

mais ce n'est pas DependencyProperty, donc je ne peut se lier à DataTrigger de mon animation.

Une solution de contournement ???

Aide!

Répondre

1

Une des façons possibles,

Vous pouvez mettre en œuvre INotifyPropertyChanged de notifier les modifications « AreWorkerBusy », créer une propriété de dépendance dans le contrôle et se lient « AreWorkerBusy » avec elle.

Créez deux événements routés l'un pour démarrer l'animation et l'autre pour arrêter l'animation.

Dans la propriété qui a été modifiée pour votre DP, augmentez l'événement routé spécifique.

Dans votre contrôle, vous écrivez des déclenchements d'événement et, en fonction du début de l'événement, vous arrêtez l'animation.

J'avais écrit une expérience similaire, http://keepitsimpleengineer.blogspot.com/2010/09/wpf-circular-progress-control-part-2.html