cambia colore del pulsante in wpf C # dopo il clic e dopo 2 minuti mantiene il colore originale

Sto usando questo codice

Hello.Background = System.Windows.Media.Brushes.Blue; var dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Interval = TimeSpan.FromSeconds(61); TimeSpan span = new TimeSpan(0,1,0); dispatcherTimer.Start(); dispatcherTimer.Tick += delegate { if (dispatcherTimer.Interval > span) { Hello.Background = System.Windows.Media.Brushes.Red; dispatcherTimer.Stop(); } }; 

Ma il pulsante continua ad attenuarsi e ad attenuarsi. Voglio che il colore sia costante

C #

  private void Button_Click(object sender, RoutedEventArgs e) { Hello.Background = System.Windows.Media.Brushes.Blue; var dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Interval = TimeSpan.FromSeconds(61); TimeSpan span = new TimeSpan(0,1,0); dispatcherTimer.Start(); dispatcherTimer.Tick += delegate { if (dispatcherTimer.Interval > span) { Hello.Background = System.Windows.Media.Brushes.Red; dispatcherTimer.Stop(); } }; } 

xaml

  

Potresti semplicemente creare uno Style e utilizzare un Trigger per avviare uno Storyboard con ColorAnimations

Esempio:

   

Ho appena provato ora ….. ma questo è il codice dietro

Codice XAML:

   

File Cs

  private void StartAnimation() { Color fromRGB= Color.FromRgb(255, 255, 255); ; Color ToRGB= Color.FromRgb(255, 0, 0); SolidColorBrush myBrush = new SolidColorBrush(); myBrush.Color = Colors.Black; ColorAnimation myAnimation = new ColorAnimation(); myAnimation.From = fromRGB; myAnimation.To = ToRGB; myAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(120000)); myAnimation.AutoReverse = true; myBrush.BeginAnimation(SolidColorBrush.ColorProperty, myAnimation ); MyButton.Background = myBrush; } 

puoi cambiare il colore quando viene chiamato l’evento e quindi chiamare la tua animazione.

Solo per mostrare un approccio diverso in realtà … Se stai utilizzando MVVM, puoi associare il colore del pulsante a una proprietà su ViewModel e, una volta fatto clic, esegui i tuoi 2 minuti di background / timer. Una volta completati i 2 minuti, cambierà il colore con l’altro.

Non molto coinvolto xaml, e mi piacciono alcune delle altre soluzioni qui 🙂

 private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { Thread.Sleep(2000); // two second ButtonColorPropertyName= Colors.Red; } 

(Supponendo che tu abbia ButtonColorPropertyName o qualsiasi altra cosa tu voglia nominare, nel ViewModel)

potresti provare a usare un semplice StoryBoard creato in Blend e poi applicare a Button / style qualcosa del genere: