我有以下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#代码中是可行的。
答案 0 :(得分:3)
TextBlock的Width
为NaN
,除非您明确设置它,并且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用于Value
,Minimum
,Maximum
等。