XAML动画倒计时

时间:2012-05-16 20:37:22

标签: wpf xaml animation triggers

我有以下TextBlock,它将是一个移动的倒数计时器:

 <TextBlock x:Name="countdown">
      <TextBlock.RenderTransform>
          <TranslateTransform x:Name="countdownTransform" />
      </TextBlock.RenderTransform>
 </TextBlock>

以下触发器应移动TextBlock并设置倒计时文本:

<Grid.Triggers>
    <EventTrigger SourceName="PlayButton" RoutedEvent="Button.Click">
         <BeginStoryboard>
               <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="songProgressBar" 
                                     Storyboard.TargetProperty="Value"
                                     From="0:30:0" To="0" Duration="0:30:0" />
                    <DoubleAnimation Storyboard.TargetName="countdownTransform" 
                                     Storyboard.TargetProperty="X" AutoReverse="True" 
                                     From="0.0" To="{Binding ElementName=countdown, Path=Width}" Duration="0:30:0" />
               </Storyboard>
          </BeginStoryboard>
    </EventTrigger>
</Grid.Triggers>

但是,DoubleAnimation的From属性不接受(显然)TimeSpan,而对于第二个触发器,To属性不绑定到TextBlock的Width。是否有自定义类型的动画在To属性中接受TimeSpan?

我希望能够在XAML中执行此操作,我知道这在c#代码中是可行的。

1 个答案:

答案 0 :(得分:3)

TextBlock的WidthNaN,除非您明确设置它,并且NaN不是DoubleAnimation的To属性的有效值。您应该已在VS输出窗口中看到错误消息:

  

System.Windows.Data错误:5:BindingExpression产生的值是   对目标财产无效。值= '的NaN'   BindingExpression:路径=宽度; DataItem ='TextBlock'(Name ='countdown');   target元素是'DoubleAnimation'(HashCode = 62632450);目标   属性为'To'(类型'Nullable`1')

您可以改为绑定到ActualWidth

<DoubleAnimation ... To="{Binding ElementName=countdown, Path=ActualWidth}" />

对于另一个动画:如果持续时间是一个常数值,为什么不设置From="30"?否则,您还必须拥有一个ProgressBar,它将TimeSpan用于ValueMinimumMaximum等。