2012-04-09 3 views
0

Ich habe den folgenden XAML-Code, der eine Animation des Rechtecks ​​auslöst, wenn das LastDataUpdate-Feld geändert wird. LastDataUpdate ist eine DateTime innerhalb einer Klasse, die INotifyPropertyChanged implementiert. Ich möchte, dass die Animation nicht ausgeführt wird, wenn LastDataUpdate == DateTime.MinValue. Gibt es eine Möglichkeit, dies im XAML zu implementieren?WPF-Animation nicht auslösen, wenn der gebundene Wert DateTime.MinValue ist

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

Andrew

Antwort

0

Warum, lösen nicht auf dem Grundstück selbst und haben einen Konverter zu bestimmen, ob Animation auszuführen?

Unter XAML wird davon ausgegangen, dass Sie einen Konverter erstellen, der das LastDataUpdate mit dem Wert auswertet, den Sie nicht möchten. Wenn Sie LastDataUpdate auf DateTime.MinValue festlegen, wird die Animation nicht gestartet. Sobald Sie eine Änderung vornehmen, wird die Bindung gezwungen, durch Property neu zu bewerten, und Konverter tun seine Entscheidungsfindung lassen ...

<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

Ich habe versucht, es in XAML zu erarbeiten und zu vermeiden, mit ein Konverter. Aber ich bin mir sicher, dass Sie Recht haben und die Verwendung eines Konverters ist der beste Weg. Vielen Dank. –

Verwandte Themen