【发布时间】:2011-01-05 22:23:12
【问题描述】:
我有一个矩形,我正在为它的背景颜色设置动画。
每次特定数字上升时,它都应变为绿色。当它下跌时是红色的。如果数字有一段时间没有变化,它会慢慢变回默认颜色
因此,动画非常快速地将背景从灰色变为红色,然后需要几秒钟才能变回灰色。
我已添加为 DataTrigger,它绑定为 1 或 -1,具体取决于数字的变化方式
问题是,如果数字不断增加,动画不会重新开始。
例如如果数字序列变为 1、2、3、4、5。那么我希望动画在每次数字变化时重新开始
我使用的代码如下
<Rectangle.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding BidChangeDirectionIndicator}"
Value="-1">
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="bidDownStory">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="#FF79797A" />
<EasingColorKeyFrame KeyTime="0:0:0.2"
Value="#FFF13B29" />
<EasingColorKeyFrame KeyTime="0:0:10.0"
Value="#FF79797A" />
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="#FF2B2B2B" />
<EasingColorKeyFrame KeyTime="0:0:0.2"
Value="#FF3F0606" />
<EasingColorKeyFrame KeyTime="0:0:10.0"
Value="#FF2B2B2B" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="bidDownStory" />
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
我绑定的 ViewModel 看起来像这样
private int _bidChangeDirectionIndicator;
public int BidChangeDirectionIndicator
{
get { return _bidChangeDirectionIndicator; }
set
{
_bidChangeDirectionIndicator = value;
RaisePropertyChanged("BidChangeDirectionIndicator");
}
}
....
public void Update(RateInfo rateInfo)
{
if (rateInfo.Bid != Bid)
{
BidChangeDirectionIndicator = Math.Sign(rateInfo.Bid - Bid);
}
}
每次数字变化时都会调用该方法(这是由正在侦听外部提要的类完成的)
【问题讨论】:
-
很难重现这个。您也可以发布您的课程代码吗?你有没有试过在这些动画上加上
FillBehavior="Stop"? -
嗨 - 我已经添加了上面的重要部分。我想你可以用一个在循环中每隔几秒调用一次更新的类来复制它
-
另外 - FillBehaviour="Stop" 不幸的是没有工作
-
尝试将该情节提要移动到资源中。
标签: wpf xaml animation datatrigger