XAML随机更改背景颜色按钮

时间:2018-04-27 17:09:24

标签: c# xaml

我想更改随机按钮。 但问题是我想用随机数量的变色来做到这一点。

现在我正在改变它,但我想动态改变颜色的变化数量。

private void ChangeColor()
{
  Random rand = new Random();
  Color[] colors = new Color[]
      {
          Colors.Red,
          Colors.Blue,
          Colors.Green,
      };


  But0_1.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
  But0_1.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
  But0_2.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
  But0_3.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
  But0_4.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
  But0_5.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
  But0_6.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
  But0_7.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
}

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

    private Random _random;

    public MainWindow()
    {
        InitializeComponent();
        _random = new Random();
    }

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        var buttons = GetButtonsToChange();

        foreach (var button in buttons)
        {
            if (button != null)
            {
                button.Background = CreateColor();
            }
        }
    }

    private Button[] GetButtonsToChange()
    {
        var amountOfButtons = RandBetween(0, 5);// <== 0 for none 5 because i only have 4 buttons and RandBetween is less than
        var listOfIndexs = new List<ButtonNumbering>();
        var listOfButtons = new List<Button>();
        for (int i = 1; i <= amountOfButtons; i++)
        {
            var buttonItem = new ButtonNumbering(i,RandBetween(1,4));
            var alreadyHasButton = listOfIndexs.Select(x => x.Number).Contains(buttonItem.Number);
            if (alreadyHasButton)
            {
                while (alreadyHasButton)
                {
                    var newRandomNumber = RandBetween(1, 5);
                    buttonItem.Number = RandBetween();
                    alreadyHasButton = listOfIndexs.Select(x => x.Number).Contains(buttonItem.Number);
                }
            }
            listOfIndexs.Add(buttonItem);
            var buttonName = $"Button{buttonItem.Number}";//<= the names of the buttons are Button1 Button2 Button3 Button4
            var button = (Button)FindName(buttonName);
             listOfButtons.Add(button);
        }

        return listOfButtons.ToArray();
    }

    private SolidColorBrush CreateColor(int bottom=0, int top=255)
    {
        var red = RandBetween(bottom,top);
        var green = RandBetween(bottom,top);
        var blue = RandBetween(bottom,top);

        return new SolidColorBrush(Color.FromRgb(red,green,blue));
    }

    private byte RandBetween(int bottom=0, int top=255)
    {
        var randomNumber = Convert.ToByte(_random.Next(bottom, top));
        return randomNumber;
    }

我已经更新了答案,因为它为所有人创建了相同的颜色。

答案 1 :(得分:0)

我无法发表评论,但3xGuy提供的RandomInt()方法总是会产生随机颜色的灰色,因为所有3个字节都是相同的。这基本上与此处描述的问题相同: Random number in a loop

将Random实例设为LocalColor的局部实例,并删除RandomInt()方法:

private static SolidColorBrush CreateColor()
{
    var random = new Random();

    var r = Convert.ToByte(random.Next(0, 255));
    var g = Convert.ToByte(random.Next(0, 255));
    var b = Convert.ToByte(random.Next(0, 255));

    return new SolidColorBrush(Color.FromRgb(r, g, b));
}