2017-09-26 5 views
-3

가 나는 데이터 그리드를 가지고 있고, 나는 사용자가 행을 추가 할 때마다 원하는, 행이 다음과 같이 총 임의의 색상을 가져옵니다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을 같이). 내가

var row = e.Row; 
row.Background = new SolidColorBrush(CellColor); 

만 첫 번째 행 색상 및 다른 세포가 흰색 남아 얻을 쓸 때 내 문제는, CellEditEnding 이벤트입니다.

답변

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에 + -를 붙이십시오.