2010-12-15 18 views
0

Meine Anwendung hat ein paar Hintergrundarbeiter, die jeweils andere Arbeit machen. Wenn ich auf die Schaltfläche "Start" klicke, wird der Hintergrund-Assistent gleichzeitig gestartet.DataTrigger auf WPF Animation

in meiner XAML, hatte ich meine Animation eines drehen Bild definiert:

<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> 

ich die Animation wollen die Background beginnen, wenn alles begann, und zu stoppen, bevor alle Hintergrund Arbeiter gestoppt.

Ich habe eine Eigenschaft Anruf 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; 
    } 
} 

aber es ist nicht DependencyProperty, so kann ich meine Animation des Datatrigger nicht binden.

Jede Umgehungslösung ???

Hilfe!

Antwort

1

Einer der möglichen Wege,

Sie können INotifyPropertyChanged implementieren Änderungen ‚AreWorkerBusy‘ zu informieren, eine Abhängigkeitseigenschaft in der Steuer- und bind ‚AreWorkerBusy‘ mit ihm erstellen.

Erstellen Sie zwei Routingereignisse, von denen eines die Animation startet und das andere die Animation stoppt.

In der Eigenschaft geändert Handler für Ihre DP, das spezifische Routing-Ereignis auslösen.

In Ihrem Steuerelement schreiben Ereignis-Trigger und auf der Grundlage des Ereignisses Start der Animation zu stoppen.

Ich hatte eine ähnliche Erfahrung geschrieben, http://keepitsimpleengineer.blogspot.com/2010/09/wpf-circular-progress-control-part-2.html