2010-12-15 53 views
0

我的应用程序有几个后台工作者,每个人都在做不同的工作。当我点击“开始”按钮时,所有背景工作人员将同时开始。关于WPF动画的DataTrigger

在我的XAML

,我已经定义我的一个旋转图像的动画:

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

我希望动画开始时,所有的BackgroundWorker的开始,停止只有当所有后台工作停止。

我有一个属性调用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; 
    } 
} 

但它不是DependencyProperty的,所以我不能绑定到我的动画的DataTrigger。

任何解决方法???

帮助!

回答

1

一种可能的方式,

您可以执行INotifyPropertyChanged通知“AreWorkerBusy”的变化,建立在控制和绑定“AreWorkerBusy”与它依赖属性。

创建两个路由事件一个开始动画,另一个停止动画。

在DP的属性更改处理程序中,引发特定的路由事件。

在你的控件中写入事件触发器,并根据事件开始停止动画。

我写过类似的经验,http://keepitsimpleengineer.blogspot.com/2010/09/wpf-circular-progress-control-part-2.html