如何在动画完成后恢复DataTrigger ExitActions中的初始值?

时间:2014-09-16 18:40:03

标签: c# wpf animation

我对一些应该相对直接的事感到非常沮丧。我有一个警报,每当状态发生变化时,我想为文本比例设置动画以增加其大小。这应该重复3次,然后停止将文本保留为原始值。

我查看了我能找到的每个例子,并尝试了几种不同的实现,没有任何影响。一旦动画停止,文本就会变大。为什么我的DataTrigger.ExitActions中的任何内容都没有工作?

<TextBlock Grid.Column="1" Grid.Row="0" FontSize="22" Text="{Binding Path=DisplayName, IsAsync=True}" Padding="2,0,2,0">
    <TextBlock.RenderTransform> 
        <ScaleTransform x:Name="scale" /> 
    </TextBlock.RenderTransform>
<TextBlock.Style>
    <Style TargetType="{x:Type TextBlock}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Value, Converter={StaticResource AlarmConverter}, IsAsync=True}" Value="true">
                <DataTrigger.EnterActions>
                    <RemoveStoryboard BeginStoryboardName="NewAlarm" />                                                     
                        <BeginStoryboard Name="NewAlarm">
                            <Storyboard RepeatBehavior="3x" >
                                <DoubleAnimation  Storyboard.TargetProperty="RenderTransform.ScaleX"
                                                  Duration="00:00:02" 
                                                  From="1"
                                                  To="1.5"  />

                                 <DoubleAnimation  
                                                   Storyboard.TargetProperty="RenderTransform.ScaleY"
                                                   Duration="00:00:02"
                                                   From="1" To="1.5"  />
                            </Storyboard>
                        </BeginStoryboard>
                    </DataTrigger.EnterActions>
                    <DataTrigger.ExitActions>
                        <RemoveStoryboard  BeginStoryboardName="NewAlarm" />
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation  
                                  Storyboard.TargetProperty="RenderTransform.ScaleX"
                                    Duration="00:00:01" />

                                     <DoubleAnimation  
                                  Storyboard.TargetProperty="RenderTransform.ScaleY"
                                  Duration="00:00:01" />
                                </Storyboard>
                             </BeginStoryboard>
                          </DataTrigger.ExitActions>
                       </DataTrigger>
                    </Style.Triggers>
                </Style>
           </TextBlock.Style>
       </TextBlock>
  1. 我尝试使用Autoreverse,但我真的不喜欢动画的外观
  2. 我在ExitActions中尝试使用和不使用标记。
  3. 我尝试在ExitAction动画中设置From和To
  4. 我尝试在ExitAction动画中设置Just To 5我尝试在ExitAction动画中设置持续时间和无To 6我在EnterActions
  5. 中尝试使用和不使用标签
  6. 我尝试添加第三个动画,该动画在前两个结束后开始

1 个答案:

答案 0 :(得分:1)

当转换器返回的值为false时,将调用ExitActions,但是想要在完成后立即删除动画。

这可以通过在故事板上将 FillBehavior 设置为 Stop 来实现,这意味着您不希望动画保持其值在它到达活跃期结束后。

<Storyboard FillBehavior="Stop" RepeatBehavior="3x" >
    <DoubleAnimation  
        Storyboard.TargetProperty="RenderTransform.ScaleX"
        Duration="00:00:02" 
        From="1"
        To="1.5"  />
    <DoubleAnimation  
        Storyboard.TargetProperty="RenderTransform.ScaleY"
        Duration="00:00:02"
        From="1" To="1.5"  />
</Storyboard>

有了这个,如果不需要,你可以摆脱ExitActions。