带数据触发器的 WPF 动画

2024-03-23

我有一个矩形,我正在为其背景颜色设置动画。

每次特定数字上升时,它都应该变为绿色。下跌时呈红色。如果数字一段时间内没有变化,它会慢慢淡回默认颜色

因此,动画非常快速地将背景从灰色变为红色,然后需要几秒钟的时间才能淡出回灰色。

我已添加为 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);
    }            
}

每次数字变化时都会调用该方法(这是由正在侦听外部源的类完成的)


[警告:我没有时间重新创建和测试它。我只是觉得这可能有帮助。]

触发器不触发的原因是值没有改变。例如,当您继续向上时,BidChangeDirectionIndicator 的值仍为 1。

也许最简单的方法是将其设置为另一个值 (0),然后设置为您想要的值。

public void Update(RateInfo rateInfo)
{
    if (rateInfo.Bid != Bid)
    {
        BidChangeDirectionIndicator = Math.Sign(rateInfo.Bid - Bid);
    }            
    else
    {
        BidChangeDirectionIndicator = 0;
        BidChangeDirectionIndicator = rateInfo.Bid;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带数据触发器的 WPF 动画 的相关文章

随机推荐

  • 将 FirestoreCollection 转换为数组?

    我在将 Firestore 数据转换为 Chart js 图表的数组时遇到困难 从 Firestore 获取数据 fetchData Get data this updatesCollection this afs collection p
  • 如何为多个 #id 创建 ::before

    是否可以在前面插入多个id I have ps4 before ps3 before 我尝试过 ps4 ps3 before但什么也没有 是否可以在之前插入更多 id 我想保持CSS尽可能干净和简短 我尝试查看 css trick 但找不到
  • 采用 OpenGL 中的 Wu 算法的数字微分分析仪

    我正在尝试制作一种使用 DDA 数字差分分析器 绘制线条的算法 该算法也使用 Wu 的算法作为抗锯齿 问题是输出看起来不太好 尤其 我选择的颜色 它改变了 我知道为什么 但我想知道它是否必须是这样的 像素颜色越亮则越亮 我怎样才能选择我想要
  • 从数据框中仅提取数字列[重复]

    这个问题在这里已经有答案了 我在互联网上查找 但没有找到简单而干净的解决方案 这是我的 df 的一部分 structure list ID structure c 12L 12L 12L 12L 12L 12L 12L 12L 12L 12
  • 缺少 1 个必需的位置参数:“key”

    class Keys def init self self key list 1 one 2 two 3 three def get name self key self ddd key key1 Keys key1 get name 1
  • React Native 导航显示白屏

    使用反应本机导航进行编译时出现白屏 请问为什么会这样 我似乎没有收到任何错误代码 什么也没有 我只看到一个白屏 为什么会这样呢 我的代码看起来像这样 表明到目前为止我似乎没有任何错误 Here is what the Error seems
  • 断言代码无法编译

    简而言之 如何编写一个测试 检查我的类不可复制或可复制分配 而只能移动和移动分配 一般来说 如何编写测试 确保特定代码does not编译 像这样 Movable but non copyable class struct A A cons
  • 如何在 @ElementCollection 上指定主键

    因此 如果某些表缺少主键 innodb 的行为可能会导致问题 因此 在 Hibernate 中 我正在寻找一个键来指定 ElementCollection 表上的主键 并将 Set 作为底层数据结构 我找到了一种带有地图的主键的方法 但这有
  • PHP,preg_replace,用标签属性替换标签

    我可以详细解释一下如何使用 php 替换具有当前 attr 的标记吗 我阅读了手册和一些参考资料 如何使用php preg replace替换HTML标签 https stackoverflow com questions 3376051
  • 不允许序列化“Doctrine\DBAL\Driver\PDOConnection”

    我正在做一个项目 我做了一个可导出的课程 这是班级 我正在发送查询以导出类型 Illuminate Database Eloquent Builder
  • 检查是否已经过去 24 小时(从字符串中读取)

    我将日期作为字符串保存在以下格式的文件中 Sat Jul 21 23 31 55 EDT 2012 如何查看是否已经过了 24 小时 我是初学者 所以请解释一下 我不确定我是否完全理解这个问题 您是否有两个日期可供比较 或者您是否希望定期检
  • 在 Jenkins 中设置特定的 Python

    我对配置 Jenkins 或 Python 很陌生 但我必须在 Jenkins 中设置统一测试 我的程序是用Python编写的 但仅适用于Python 2 6 而我应该使用的Jenkins版本是2 7 所以我尝试设置Jenkins来设置一些
  • 将可变数量的变量传递给 PHP 中的类

    我需要传递可变数量的字符串来实例化不同的类 我总是可以对数组的大小进行切换 switch count a case 1 new Class a 0 break case 2 new Class a 0 a 1 break etc 必须有更好
  • Prolog 中的掩码

    我最近一直在尝试理解 Prolog 并且一直在搞乱 Prolog 中的列表列表 我正在尝试创建一种我想在 p 中的面具 序言 我有一个谓词 它确定 Prolog 中两个列表列表 比如说 L1 和 L2 之间的差异 并将它们保存为列表列表 比
  • 如何测试是否支持稀疏文件

    给定文件描述符或文件名 我如何知道是否可以写入任意位置 而无需等待磁盘上的中间部分被显式清零 You can stat 文件获取文件大小和磁盘块数量 在文件末尾查找相对较少数量的磁盘块 写入已知数量的块 然后再次统计文件 将磁盘块的原始数量
  • 移动提供商无法进行 UDP 打洞

    实际上 我正在编写一个 Android 应用程序 该应用程序接收连接到 PC 的网络摄像头的图片 为了获得更多的 fps 我使用 udp 协议而不是 tcp 这个想法是 电脑将图片发送到手机的 IP 和端口 但电话提供商有不同的公共端口 所
  • 在 iOS 中检索通过蓝牙连接的配对设备

    我已连接条形码扫描仪设备 条码扫描仪信息 http www barcodedatalink com pages product details php p 108 我想知道它的配对状态 是否与设备连接 void centralManager
  • Django 使用 ManytoMany 作为外键

    我正在尝试使用多对多关系作为另一个表的外键 但我不确定这是否可能 考虑以下模型 from django db import models class Attribute models Model name models CharField
  • 通过类的java sql连接

    我有以下代码 import java sql import java net public class binsz public void dbConnect String db connect string String username
  • 带数据触发器的 WPF 动画

    我有一个矩形 我正在为其背景颜色设置动画 每次特定数字上升时 它都应该变为绿色 下跌时呈红色 如果数字一段时间内没有变化 它会慢慢淡回默认颜色 因此 动画非常快速地将背景从灰色变为红色 然后需要几秒钟的时间才能淡出回灰色 我已添加为 Dat