我想設置一個網格,我在那裏做列排序,但我想做斑馬條紋,而不是每隔一行或每x行,我想它基於前一行的值。即包含0的所有行都有一個藍色的背景,下一個值將有一個白色的背景,下一個值將是藍色等...基於前一行設置DataGrid背景顏色
我的問題是,我似乎無法找到在哪裏實際上做背景顏色的設置。我使用的是自定義分類器,在重新排列列表並設置數據源之後,我嘗試將它設置在那裏,但似乎在設置數據源時,這些行還不存在。我嘗試使用DataContextChanged,但該事件似乎並沒有被解僱。
這是我現在擁有的。
namespace Foo.Bar
{
public partial class FooBar
{
List<Bla> ResultList { get; set; }
SolidColorBrush stripeOneColor = new SolidColorBrush(Colors.Gold);
SolidColorBrush stripeTwoColor = new SolidColorBrush(Colors.White);
//*********************************************************************************************
public Consistency()
{
InitializeComponent();
}
//*********************************************************************************************
override protected void PopulateTabWithData()
{
ResultList = GetBlas();
SortAndGroup("Source");
}
//*********************************************************************************************
private void SortAndGroup(string colName)
{
IOrderedEnumerable <Bla> ordered = null;
switch (colName)
{
case "Source":
case "ID":
ordered = ResultList.OrderBy(r => r.Source).ThenBy(r => r.ID);
break;
case "Name":
ordered = ResultList.OrderBy(r => r.Source).ThenBy(r => r.Name);
break;
case "Message":
ordered = ResultList.OrderBy(r => r.Message);
break;
default:
throw new Exception(colName);
}
ResultList = ordered.ThenBy(r => r.Source).ThenBy(r => r.ID).ToList(); // tie-breakers
consistencyDataGrid.ItemsSource = null;
consistencyDataGrid.ItemsSource = ResultList;
ColorRows();
}
//*********************************************************************************************
private void consistencyDataGrid_Sorting(object sender, System.Windows.Controls.DataGridSortingEventArgs e)
{
SortAndGroup(e.Column.Header.ToString());
e.Handled = true;
}
private void ColorRows()
{
for (var i = 0; i < ResultList.Count; i++)
{
var currentItem = ResultList[i];
var row = myDataGrid.ItemContainerGenerator.ContainerFromItem(currentItem) as DataGridRow;
if (row == null)
{
continue;
}
if (i > 0)
{
var previousItem = ResultList[i - 1];
var previousRow = myDataGrid.ItemContainerGenerator.ContainerFromItem(previousItem) as DataGridRow;
if (currentItem.Source == previousItem.Source)
{
row.Background = previousRow.Background;
}
else
{
if (previousRow.Background == stripeOneColor)
{
row.Background = stripeTwoColor;
}
else
{
row.Background = stripeOneColor;
}
}
}
else
{
row.Background = stripeOneColor;
}
}
}
}
}
}
如果你的rowcolor是基於任何行值,你可以簡單地使用單元格樣式來設置你的行背景顏色 – blindmeis 2012-04-02 17:34:22
在這種情況下,我不在乎單元格/行的值是多少,我只關心它是否有差異來自上一個單元格/行。所以我真正想要的是條紋,而不是基於價值的着色。 – Zipper 2012-04-02 17:55:52
然後解決問題,因爲您聲明「我希望它基於單元格的值」。如果你想爲單元格或行着色,請清楚。 – Paparazzi 2012-04-02 18:16:36