C# 将动画标记为代码而不是故事板

C# 将动画标记为代码而不是故事板,c#,wpf,xaml,C#,Wpf,Xaml,我正在使用事件处理程序每秒检查值是否低于阈值。如果是,它将以红色显示标签文本。我想让这个标签闪光。我可以使用一个故事板,但它会写在xaml部分,并且有点固定。是否有办法使标签在主窗口部分写入的代码上闪烁 public MainWindow() { InitializeComponent(); CalculateEvent += CPUHandler; } void Handler(object sender, MyEventArgs args) { if (args.T

我正在使用事件处理程序每秒检查值是否低于阈值。如果是,它将以红色显示标签文本。我想让这个标签闪光。我可以使用一个故事板,但它会写在xaml部分,并且有点固定。是否有办法使标签在主窗口部分写入的代码上闪烁

public MainWindow()
{
    InitializeComponent();
    CalculateEvent += CPUHandler;
}

void Handler(object sender, MyEventArgs args)
{
    if (args.TotalSum < 5000)
    {
        label11.Foreground = Brushes.Red;
    }
    else
    {
        label11.Foreground = Brushes.White;
    }
}
public主窗口()
{
初始化组件();
CalculateEvent+=CPUHandler;
}
无效处理程序(对象发送方,MyEventArgs参数)
{
如果(参数总和<5000)
{
标签11.前景=画笔.红色;
}
其他的
{
标签11。前景=画笔。白色;
}
}

您知道xaml部分中的标记也只是csharp类吗

当然你可以使用故事板类!符号只是有点不同


你不需要故事板。只需将(可修改的)SolidColorBrush指定给标签的
前景
,并在其
颜色
属性上启动
彩色动画

var colorAnimation = new ColorAnimation
{
    To = Colors.Red,
    Duration = TimeSpan.FromSeconds(0.1),
    AutoReverse = true,
    RepeatBehavior = new RepeatBehavior(3)
};

var foreground = label.Foreground as SolidColorBrush;

if (foreground == null || foreground.IsFrozen)
{
    foreground = new SolidColorBrush(Colors.White);
    label.Foreground = foreground;
}

foreground.BeginAnimation(SolidColorBrush.ColorProperty, colorAnimation);
当然,为了获得所需的闪烁效果,您可能必须使用动画的属性,如
持续时间
自动翻转
重复行为


如果直接在XAML中指定SolidColorBrush,如下所示:

<Label x:Name="label" ...>
    <Label.Foreground>
        <SolidColorBrush Color="White"/>
    </Label.Foreground>
</Label>

似乎符号有点不同。正在搜索。是的。但您会看到,它们都只是具有属性的类。顺便说一下,它们在xaml:)中称为标记和属性。也许您可以将故事板放在应用程序的资源中。然后在代码中检索它。
label.Foreground.BeginAnimation(SolidColorBrush.ColorProperty,
    new ColorAnimation
    {
        To = Colors.Red,
        Duration = TimeSpan.FromSeconds(0.1),
        AutoReverse = true,
        RepeatBehavior = new RepeatBehavior(3)
    });