2012-04-09 31 views
0

我有以下XAML代碼,它會在LastDataUpdate字段更改時觸發矩形的動畫。 LastDataUpdate是實現INotifyPropertyChanged的類中的DateTime。如果LastDataUpdate == DateTime.MinValue,我想動畫不運行。有什麼方法可以在XAML中實現這一點嗎?如果綁定值爲DateTime.MinValue,則不觸發WPF動畫

<Rectangle x:Name="NewDataAnimation" Tag="{Binding Path=LastDataUpdate, NotifyOnTargetUpdated=True}" Opacity="0" Width="5" Height="5" Fill="LawnGreen" HorizontalAlignment="Left" VerticalAlignment="Top"> 
<Rectangle.Style> 
    <Style> 
    <Style.Triggers> 
     <EventTrigger RoutedEvent="Binding.TargetUpdated"> 
     <EventTrigger.Actions> 
      <BeginStoryboard> 
      <Storyboard> 
       <DoubleAnimation Storyboard.TargetProperty="Opacity" Duration="0:0:0" To="1.0" /> 
       <DoubleAnimation Storyboard.TargetProperty="Opacity" Duration="0:0:4" From="1.0" To="0.0" BeginTime="0:0:2" /> 
      </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger.Actions> 
     </EventTrigger> 
    </Style.Triggers> 
    </Style> 
</Rectangle.Style> 

安德魯

回答

0

爲什麼,不會觸發對房地產本身,有一個轉換器確定是否執行動畫?

下面的XAML假定您創建一個轉換器,它將根據您不需要的值計算LastDataUpdate。如果將LastDataUpdate設置爲DateTime.MinValue,則動畫將不會啓動。只要你做出改變,綁定將被迫通過的PropertyChanged重新評估,並會讓轉換器做它的決策......

<Rectangle Opacity="0" Width="5" Height="5" Fill="LawnGreen" HorizontalAlignment="Left" VerticalAlignment="Top"> 
    <Rectangle.Style> 
     <Style> 
      <Style.Triggers> 
       <Trigger Property="{Binding LastDataUpdate, Converter={StaticResource LastDataUpdateToDoAnimation}}" Value="True" > 
        <Trigger.EnterActions> 
         <BeginStoryboard> 
          <Storyboard> 
           <DoubleAnimation Storyboard.TargetProperty="Opacity" Duration="0:0:0" To="1.0" /> 
           <DoubleAnimation Storyboard.TargetProperty="Opacity" Duration="0:0:4" From="1.0" To="0.0" BeginTime="0:0:2" /> 
          </Storyboard> 
         </BeginStoryboard> 
        </Trigger.EnterActions> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Rectangle.Style> 
</Rectangle> 
+0

我試圖去解決它在XAML和避免使用一個轉換器。不過,我相信你是對的,使用Converter是最好的方法。謝謝。 – 2012-04-10 08:49:44