带有数据触发器的WPF动画

带有数据触发器的WPF动画,wpf,xaml,animation,datatrigger,Wpf,Xaml,Animation,Datatrigger,我有一个矩形,我是动画的背景颜色 每次特定数字上升时,它都应该变为绿色。当它变红的时候。如果数字在一段时间内没有变化,它会慢慢淡出到默认颜色 因此,动画会很快将背景从灰色变为红色,然后花几秒钟时间淡入灰色 我添加了作为DataTrigger,它绑定到1或-1,具体取决于数字的变化 问题是,如果数字持续上升,动画就不会重新启动 e、 g.如果数字顺序为1、2、3、4、5。然后,我希望动画在每次数字更改时重新启动 下面是我正在使用的代码 <Rectangle.Style> <

我有一个矩形,我是动画的背景颜色

每次特定数字上升时,它都应该变为绿色。当它变红的时候。如果数字在一段时间内没有变化,它会慢慢淡出到默认颜色

因此,动画会很快将背景从灰色变为红色,然后花几秒钟时间淡入灰色

我添加了作为DataTrigger,它绑定到1或-1,具体取决于数字的变化

问题是,如果数字持续上升,动画就不会重新启动

e、 g.如果数字顺序为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>

每次数字更改时都会调用该方法,这是由正在侦听外部提要的类完成的。[注意:我没有时间重新创建和测试该方法。我只是认为它可能会有所帮助。]

触发器不触发的原因是该值没有更改。例如,当您继续上升时,BidChangeDirectionIndicator的值保持为1

也许最简单的方法是将其设置为另一个值0,然后设置为所需的值

public void Update(RateInfo rateInfo)
{
    if (rateInfo.Bid != Bid)
    {
        BidChangeDirectionIndicator = Math.Sign(rateInfo.Bid - Bid);
    }            
    else
    {
        BidChangeDirectionIndicator = 0;
        BidChangeDirectionIndicator = rateInfo.Bid;
    }
}

[注意:我还没有时间重新创建和测试它。我只是认为它可能会有所帮助。]

触发器不触发的原因是该值没有更改。例如,当您继续上升时,BidChangeDirectionIndicator的值保持为1

也许最简单的方法是将其设置为另一个值0,然后设置为所需的值

public void Update(RateInfo rateInfo)
{
    if (rateInfo.Bid != Bid)
    {
        BidChangeDirectionIndicator = Math.Sign(rateInfo.Bid - Bid);
    }            
    else
    {
        BidChangeDirectionIndicator = 0;
        BidChangeDirectionIndicator = rateInfo.Bid;
    }
}

这很难重现。你也可以发布你的班级代码吗?在我的脑海里,你有没有尝试过在这些动画上添加FillBehavior=Stop?嗨,我已经添加了上面重要的内容。我想你可以用一个类来复制它,该类在一个循环中每隔几秒钟调用一次update。不幸的是-fillbehavior=Stop无法将情节提要移动到资源中。很难重新创建它。你也可以发布你的班级代码吗?在我的脑海里,你有没有尝试过在这些动画上添加FillBehavior=Stop?嗨,我已经添加了上面重要的内容。我想你可以用一个类来复制它,这个类在一个循环中每隔几秒钟调用update也-fillbehavior=Stop不起作用不幸的是,将情节提要移动到资源中。