Не удается анимировать свойство color, потому что объект запечатан или заморожен

Я видел другие подобные проблемы, но они всегда, кажется, делают это в 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 ответ

Решение

Вы должны были бы назначить изменчивый 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,

Другие вопросы по тегам