使用 WPF 的持续颜色变化
本文关键字:颜色 变化 WPF 使用 | 更新日期: 2023-09-27 18:36:01
嗨,我创建了 4 个矩形,每个矩形都给它们一种颜色。我现在尝试在按下时使用按钮来不断随机更改这 4 个框的颜色(产生某种闪烁效果)。计算出了以下代码,但是当我按下按钮时程序卡住。
阅读System.Windows.Threading.DispatcherTimer
在这种情况下会有用,但不确定如何使用它。寻找有关如何使用它的建议。谢谢。
namespace testDisco
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
Random r;
Rectangle[] rects;
SolidColorBrush blue;
SolidColorBrush red;
SolidColorBrush yellow;
SolidColorBrush green;
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
r = new Random();
rects = new Rectangle[4];
blue = new SolidColorBrush(Color.FromArgb(255,0,232,255));
red = new SolidColorBrush(Color.FromArgb(129,56,56,255));
yellow = new SolidColorBrush(Color.FromArgb(0,232,255,255));
green = new SolidColorBrush(Color.FromArgb(176,207,176,255));
rects[0] = rect1;
rects[1] = rect2;
rects[2] = rect3;
rects[3] = rect4;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
int randomNumber = r.Next(4);
System.Windows.Threading.DispatcherTimer dt = new System.Windows.Threading.DispatcherTimer();
while (true)
{
rects[randomNumber].Fill = red;
}
}
}
}
你快到了。稍微减慢循环速度,这样它就不会使程序崩溃。
System.Windows.Threading.DispatcherTimer dt = new System.Windows.Threading.DispatcherTimer();
dt.Interval = TimeSpan.FromSeconds(1); //or whatever interval you want
dt.Tick += (s, e) =>
{
rects[r.Next(0,3)].Fill = red;
}
虽然这最终只会使它们全部变红,因为当您选择随机矩形时,您不会选择随机颜色。
您可能需要查看此处定义的 WPF 动画系统:
动画概述 - MSDN
在这里发布答案有点复杂,但是当我尝试做类似的事情时,我发现了它。不过,它比尝试自己做更好。事实上,甚至有一种ColorAnimation
可以完全满足您的需求。