无法为颜色属性设置动画,因为对象已被密封或冻结

时间:2016-11-01 11:10:23

标签: c# wpf coloranimation

我已经看到了其他类似问题,但他们似乎总是在XAML中这样做,因为这是在事件处理程序中我需要在c#中找出答案。基本上我只需要发送菜单项闪烁红色。

ColorAnimation ca = new ColorAnimation()
{
    From = Color.FromRgb(0, 0, 0),
    To = Color.FromRgb(255,0,0),
    AutoReverse = true,
    RepeatBehavior = new RepeatBehavior(3),
    Duration=new Duration(TimeSpan.FromSeconds(.5))
};
(sender as MenuItem).Foreground.BeginAnimation(SolidColorBrush.ColorProperty, ca);

1 个答案:

答案 0 :(得分:4)

您必须将一个可变的SolidColorBrush实例分配给元素的Foreground属性,然后才能在XAML或后面的代码中对其进行动画处理:

var item = (MenuItem)sender;
item.Foreground = new SolidColorBrush(Colors.Black);
item.Foreground.BeginAnimation(SolidColorBrush.ColorProperty, ca);

如果您使用当前颜色值设置动画(例如此处为Black),则无需设置动画的From属性。

另请注意,您不应使用as运算符,而不检查结果是否为null。最好使用显式类型转换而不是as,因为如果sender不是MenuItem,您将正确地获得InvalidCastException而不是NullReferenceException