在点击后更改wpf C#中的按钮颜色,并在2分钟后保留原始颜色

我正在使用此代码

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(); } }; 

但是按钮会逐渐消失并淡出。 我希望颜色不变

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

  

您可以创建一个Style并使用Trigger来启动带有ColorAnimationsStoryboard

例:

  

刚刚试了一下……然而这就是背后的代码

XAML代码:

   

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; } 

您可以在调用事件时更改颜色,然后调用动画。

只是为了展示一种不同的方法……如果你正在使用MVVM,你可以将你的按钮颜色绑定到ViewModel上的属性,一旦你点击它,就运行你的2分钟背景/计时器。 完成2分钟后,它会将颜色更改为另一个颜色。

涉及的xaml不多,我确实喜欢这里的一些其他解决方案:)

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

(假设你有ButtonColorPropertyName或你想要命名的任何东西,在ViewModel中)

你可以尝试使用在Blend中创建的简单StoryBoard然后应用于这样的Button / style: