WPF ColorAnimation似乎保留了原始颜色的一部分?

时间:2010-06-16 10:13:19

标签: wpf xaml animation binding coloranimation

我在使用彩色动画时遇到了一个奇怪的问题。

我有一个绑定到列表框的项目列表。这些项有一个枚举属性,可以有三个值之一 - NoRemarks,RemarksFound和RemarksUpdated。

在此列表框的datatemplate上,我有一个矩形,显示与项目状态相关的颜色 - 红色,橙色或绿色。模板中有一个数据触发器可以为框设置动画,但每当动画触发时,它似乎都会保留旧颜色。如果我从红色到绿色的动画,我会得到一种橙色的深绿色。如果我从橙色到绿色动画,我会得到一个相似的颜色,虽然我可以看到颜色与我从红色到绿色的动画时略有不同。

这是XAML - 我只包括了必要的部分:

矩形:

<Rectangle x:Name="HeaderRemarkStatusRectangle" Grid.Column="1" Grid.Row="0" Grid.RowSpan="3" HorizontalAlignment="Left"
        RadiusX="1" RadiusY="1" Width="10" Margin="3" StrokeThickness="1" >
    <Rectangle.Stroke>
      <SolidColorBrush Color="#FFDC5A5A" x:Name="RectangleStroke" />
    </Rectangle.Stroke>
    <Rectangle.Fill>
      <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
        <GradientStop Color="#ff7a7a" Offset="0.5" x:Name="GradientStop1" />
        <GradientStop Color="#ff5653" Offset="0.5" x:Name="GradientStop2" />
      </LinearGradientBrush>
    </Rectangle.Fill>
  </Rectangle>

触发器:

                                                                                                                                                                     

  <DataTrigger Binding="{Binding Path=ItemStatus}" Value="RemarksUpdated">
    <DataTrigger.EnterActions>
      <BeginStoryboard>
        <BeginStoryboard.Storyboard>
          <Storyboard Duration="0:0:0.5" >
            <ColorAnimation Storyboard.TargetName="GradientStop1" Storyboard.TargetProperty="Color" To="#83ec71" />
            <ColorAnimation Storyboard.TargetName="GradientStop2" Storyboard.TargetProperty="Color" To="#5dda4e" />
            <ColorAnimation Storyboard.TargetName="RectangleStroke" Storyboard.TargetProperty="Color" To="#FF50AA46" />
          </Storyboard>
        </BeginStoryboard.Storyboard>
      </BeginStoryboard>
    </DataTrigger.EnterActions>
  </DataTrigger>
</DataTemplate.Triggers>

我已经尝试了几件事来纠正这个问题......

我已经尝试为每个触发器设置Datatrigger.exitactions以将颜色返回到白色(有点软糖但我想看看是否缺少“From”部分是问题)。当动画触发时,我最终得到了一个半透明的盒子,虽然它是正确的颜色。

我也试过设置“从”属性 - 再次,不太实际,因为我不知道触发器的原始颜色是什么,但我想看到效果。我得到了与上面类似的结果。

还尝试更改FillBehaviour属性,但将其设置为“停止”意味着一旦动画完成(正如预期),颜色将恢复为原始颜色。

我认为动画会根据当前颜色(来自datatemplate或当前动画,如果存在)动画,并会动画为新颜色。我无法理解为什么我似乎在原始颜色和新颜色之间获得颜色。这是彩色动画的已知问题还是我的触发器有问题?

全部谢谢

1 个答案:

答案 0 :(得分:3)

您需要在ColorAnimation对象上设置持续时间。动画的默认Duration为1秒,因此您的0.5秒故事板仅运行动画的一半。

<Storyboard>
    <ColorAnimation Storyboard.TargetName="GradientStop1" Storyboard.TargetProperty="Color" To="#83ec71" Duration="0:0:0.5"/>
    <ColorAnimation Storyboard.TargetName="GradientStop2" Storyboard.TargetProperty="Color" To="#5dda4e" Duration="0:0:0.5"/>
    <ColorAnimation Storyboard.TargetName="RectangleStroke" Storyboard.TargetProperty="Color" To="#FF50AA46" Duration="0:0:0.5"/>
</Storyboard>