2017-09-26 73 views
-3

我有一個DataGrid,我想,只要用戶添加行,該行獲得一個總隨機顏色如下:如何爲wpf datagrid中的每一行設置不同的「隨機」顏色?

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

顏色被重置。您需要在創建新行之前將此代碼添加到函數中並調用。嘗試一下這樣的事情。

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()); 
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); 
} 
1

請記住,使用這種方法,但是rainbow'ish你得到它從一個缺乏控制的缺點。

,如果你得到以下海誓山盟50個黃行麼? 如果最後的1000行都有不同的顏色,但它們只是黃色的色調?

適當的答案對你要求已經提供了什麼,但你可能會考慮增加更多的邏輯以後。

  • 例如,您可以將最後X行的顏色存儲在列表中,並檢查它是否有所不同。
  • 比較與下面的行/對當前的頂部,這樣就得到一個新的隨機,如果是太相似了。
  • 如果當前行R + G + B是從以前的行R + G + B,則X值,你知道,他們倆都得到了很多的色彩,可能會考慮讓一個新的隨機那是輕。

也可以使粗糙的預設,並將它們存儲在列表中。從列表中選擇一個隨機元素並在r,g,b上給它+ - 。

相關問題