我有一个数据网格,我希望每当用户添加一行时,该行获得一个总随机颜色,如下所示:
do
{
r = (byte)R.Next(0, 255);
b = (byte)R.Next(0, 255);
g = (byte)R.Next(0, 255);
a = (byte)R.Next(128, 255);
}
while (r + b + g < 200);
CellColor.B = b;
CellColor.G = g;
CellColor.R = r;
CellColor.A = a;
所以它不像我在很多问题中那样预编译定义的颜色(如this)。 当我写
时,我的问题出在CellEditEnding事件中var row = e.Row;
row.Background = new SolidColorBrush(CellColor);
只有第一行获取颜色,其他单元格保持白色。
答案 0 :(得分:1)
请记住,通过这种方法,无论如何,你可以让它受到缺乏控制的困扰。
如果你跟着另外50行黄色怎么办? 如果最后1000行都有不同的颜色,但它们只是黄色的阴影怎么办?
已提供您所要求的适当答案,但您可能会考虑稍后添加更多逻辑。
或者您可以制作粗略的预设并将其存储在列表中。从列表中选择一个随机元素,并在r,g,b。
上给它+ -答案 1 :(得分:0)
颜色重置。您需要在函数中添加此代码并在创建新行之前调用。尝试这样的事情。
CellColor RandomColor()
{
do
{
r = (byte)R.Next(0, 255);
b = (byte)R.Next(0, 255);
g = (byte)R.Next(0, 255);
a = (byte)R.Next(128, 255);
}
while (r + b + g < 200);
CellColor.B = b;
CellColor.G = g;
CellColor.R = r;
CellColor.A = a;
return CellColor;
}
var row = e.Row;
row.Background = new SolidColorBrush(RandomColor());
答案 2 :(得分:0)
这对我有用:
private readonly Random R = new Random();
private void dataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
byte r;
byte b;
byte g;
byte a;
do
{
r = (byte)R.Next(0, 255);
b = (byte)R.Next(0, 255);
g = (byte)R.Next(0, 255);
a = (byte)R.Next(128, 255);
}
while (r + b + g < 200);
Color CellColor = new Color();
CellColor.B = b;
CellColor.G = g;
CellColor.R = r;
CellColor.A = a;
var row = e.Row;
row.Background = new SolidColorBrush(CellColor);
}