Не удается анимировать свойство 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
,