c# - 无法为颜色属性设置动画,因为对象已密封或卡住

标签 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);

最佳答案

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

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

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


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

关于c# - 无法为颜色属性设置动画,因为对象已密封或卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40358884/

相关文章:

c# - 从 MainWindow 访问类中的方法

wpf - 在 wpf 中将图像放入 ViewPort3D

WPF ColorAnimation似乎保留了部分原始颜色?

c# - 使 CollectionViewSource 无效

c# - 在 C# 中使用 Web Client 时是否有上传限制?

c# - Task.ContinueWith 不适用于 OnlyOnCanceled

c# - 在处置 DbContext 时使用 EntityFramework 导航属性

c# - 通过 F# 绑定(bind)到 View 模型的接口(interface)实现期间出现 BindingError

wpf - Borderbrush 着色动画淡入淡出

Window.Resources 内的 WPF ColorAnimation