Цвет фона кнопки Анимация

У меня около 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 запускала анимацию, а не все из них. любое решение этого? возможно, я использую неправильное свойство, чтобы начать анимацию.


person Al00X    schedule 15.12.2018    source источник
comment
Добавьте разные экземпляры SolidColorBrush в фон кнопок. По одному на кнопку. Обратите внимание: вам не нужно устанавливать ca.From. Он автоматически начнется с текущего значения.   -  person Clemens    schedule 15.12.2018
comment
@Clemens спасибо за решение, сработало, я использовал одну кисть для всех кнопок, я изменил ее на button.background = mybrush.Clone(); и исправил проблему   -  person Al00X    schedule 15.12.2018


Ответы (1)


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

person Jabokoe    schedule 15.12.2018