我想使用多个画布并为每个画布设置不同的背景。我将canvas的背景分配给随机颜色生成函数。但它只为所有画布返回一种颜色。
wpf例子:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Canvas Name="canvas1" Grid.Column="0"></Canvas>
<Canvas Name="canvas2" Grid.Column="1"></Canvas>
</Grid>
c#示例:
private void SetColor()
{
canvas1.Background = new SolidColorBrush(RandomNewColor());
canvas2.Background = new SolidColorBrush(RandomNewColor());
}
private Color RandomNewColor()
{
Random RandomColor = new Random();
Byte[] _byte = new Byte[3];
RandomColor.NextBytes(_byte);
byte red = _byte[0];
byte green = _byte[1];
byte blue = _byte[2];
return Color.FromArgb(255, red, green, blue);
}
答案 0 :(得分:0)
Random类使用种子值来生成其数字序列。通过在没有参数的情况下调用它,它使用系统时钟作为种子,并且很可能在两个画布控件之间调用太快,因此最终使用相同的种子值。来自docs at Microsoft:
但是,因为时钟具有有限的分辨率,所以使用了 无参数构造函数,用于在close中创建不同的Random对象 继承创建产生相同的随机数生成器 随机数序列。
您可以在构造函数调用中添加一个参数,但我认为这不会真正解决您的问题。最好移动Random out的实例并将其作为类成员的单个实例。即。
private Random RandomColor = new Random();
private Color RandomNewColor()
{
Byte[] _byte = new Byte[3];
RandomColor.NextBytes(_byte);