2012-05-16 51 views
0

我有以下的TextBlock這將是一個移動的倒計時計時器:XAML動畫運動倒計時

<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的寬度。是否有一種自定義類型的動畫可以在To屬性中接受TimeSpan?

我希望能夠在XAML中做到這一點,我知道這是可能的C#代碼。

回答

3

TextBlock的WidthNaN,除非你明確地設置它,NaN是不是一個DoubleAnimation是的To屬性的有效值。你應該看到在VS輸出窗口中的錯誤消息:

System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='NaN' BindingExpression:Path=Width; DataItem='TextBlock' (Name='countdown'); target element is 'DoubleAnimation' (HashCode=62632450); target property is 'To' (type 'Nullable`1')

您可以改爲綁定到ActualWidth

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

對於其他動畫:如果持續時間是一個常數,何不乾脆設置From="30"?否則,你也必須有一個進度條,需要一個時間跨度爲ValueMinimumMaximum

+0

感謝您的回答,其實時間不是恆定的值,它綁定到一個資源:時間=「{結合XPath的=時間}」。第一個動畫正在工作。 – Mihai

+0

爲什麼你不能綁定到[TimeSpan.TotalMinutes](http://msdn.microsoft.com/en-us/library/system.timespan.totalminutes.aspx),比如'Duration =「{Binding XPath = time.TotalMinutes }「'? – Clemens

+0

是的。這將工作,謝謝。 – Mihai