В моем окне около 30 кнопок, и я хочу изменить цвет фона одной из них после некоторых процессов.
Вот мой код:
private void Button_Click(object sender, RoutedEventArgs e){
.
. //A Dialog Shows Up And Do Some Processes
.
Button b = (Button)sender;
ColorAnimation ca = new ColorAnimation();
ca.From = ((SolidColorBrush)b.Background).Color;
ca.To = Color.FromArgb(255, 132, 27, 13);
ca.Duration = new Duration(TimeSpan.FromMilliseconds(2000));
ca.EasingFunction = new QuadraticEase();
b.Background.BeginAnimation(SolidColorBrush.ColorProperty, ca);
}
Некоторые из моих кнопок привязаны к этому событию. Когда этот метод запускается и выполняет какие-то действия, все кнопки того же цвета, что и sender, начинают анимацию, но я хочу, чтобы sender запускал анимацию, а не все из них. какое решение для этого? возможно, я использую неправильное свойство для начала анимации.
@Clemens спасибо за решение, сработало, я использовал одну кисть для всех кнопок, я изменил ее на button.background = mybrush.Clone(); и исправил проблему





Создание новой кисти для каждой кнопки решит вашу проблему. Причина, по которой ваши кнопки совместно используют анимацию, заключается в том, что classes - это Типы ссылок в C#. Когда придет время рисовать кнопки, все кнопки заметят изменение, которое анимация внесла в Color внутри кисти, которую они разделяют. Когда вы дадите каждой из них собственную кисть, их кисть будет иметь свой цвет, который можно анимировать независимо.

Добавьте разные экземпляры SolidColorBrush к фонам кнопок. По одному на кнопку. Обратите внимание, вам не нужно устанавливать
ca.From. Он автоматически начнется с текущего значения.