1

嗨,我创建了 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;
            }
        }
    }
}
4

2 回答 2

1

您快到了。稍微放慢你的循环,这样它就不会让你的程序崩溃。

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

尽管这最终只会使它们全部变为红色,因为当您选择随机矩形时,您并没有选择随机颜色。

于 2013-10-17T19:50:42.003 回答
-1

您可能想查看此处定义的 WPF 动画系统:

动画概述 - MSDN

在这里发布答案有点复杂,但是当我尝试做类似的事情时,我发现了一段时间。不过,它比尝试自己做更好。事实上,甚至有一个ColorAnimation可以完全满足您的需求。

于 2013-10-17T20:03:34.827 回答