由于对象已密封或冻结,因此无法设置颜色属性的动画

Wob*_*les 2 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);
Run Code Online (Sandbox Code Playgroud)

Cle*_*ens 6

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

var item = (MenuItem)sender;
item.Foreground = new SolidColorBrush(Colors.Black);
item.Foreground.BeginAnimation(SolidColorBrush.ColorProperty, ca);
Run Code Online (Sandbox Code Playgroud)

如果从当前颜色值(例如,Black此处)进行动画处理,则不必设置From动画的属性。


另请注意,如果as不检查结果是否为,则不应使用运算符null。最好使用显式类型强制转换来代替as,因为万一sender不是a MenuItem,则可以正确地得到a InvalidCastException而不是a NullReferenceException