【问题标题】:XAML random change of background color buttonsXAML 随机更改背景颜色按钮
【发布时间】:2018-04-27 17:09:23
【问题描述】:

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

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

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

【问题讨论】:

  • 您能否更详细地解释您的要求?
  • 您可以通过选择随机的红绿蓝值来创建随机颜色。

标签: c# xaml


【解决方案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;
    }

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

【讨论】:

  • 非常感谢。但是我可以通过哪种方式列出此按钮并选择将要更改的数量(不是全部,但例如从 40 个中随机选择 10 个)。
  • 感谢您的回答-但这不是我想要的。我想随机选择将要更改的按钮(不是颜色)。例如,我有 10 个按钮,每次单击时,例如 3 个随机按钮都会改变颜色。其余7个也一样。在下一次点击时 - 下一个 3 个随机按钮应该被更改。
  • 哦,好吧,让我来解决这个问题。你想让它随机选择按钮来改变颜色吗?
  • 我有 48 个按钮,每次点击我都想从 48 个按钮中抽取 20 个按钮,这些按钮会改变颜色(随机颜色 - 红蓝绿)。
  • 我已经更新了答案,请查看答案中的注释以确保您拥有正确数量的按钮。
【解决方案2】:

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

将 Random 实例设为 CreateColor 的本地实例并移除 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));
}

【讨论】:

  • 非常感谢。但是我可以通过哪种方式列出此按钮并选择将要更改的数量(不是全部,但例如从 40 个中随机选择 10 个)。
猜你喜欢
  • 1970-01-01
  • 2014-10-07
  • 2022-07-11
  • 2015-06-04
  • 1970-01-01
  • 2021-06-22
  • 2015-04-03
相关资源
最近更新 更多