我正在编写一个Silverlight应用程序,可让您通过输入的分隔符解析复制的文本。在解析数据并将其放入网格后,用户可以“清理”数据。这会将单元格的当前值与列的允许值进行比较,选择其最佳猜测并通过ItemsSource属性将数据重新绑定到网格。
我的问题是我知道每个细胞的坐标已经“擦洗”了,我想突出显示这个细胞或改变它的背景颜色。据我所知,您可以单独设置DataGridCell的背景,但我无法访问DataGridCell。我可以访问Grid的列和行,但是这些似乎也没有像我希望的那样提供对DataGridCell的访问。在设置ItemsSource后,有没有人有办法访问DataGridCell?
答案 0 :(得分:5)
如果循环遍历ItemsSource绑定的集合,则可以获取每一行并遍历获取内容和单元格的列 - 类似这样的东西(技巧是content.Parent作为DataGridCell):
var collection = grid.ItemsSource;
foreach (var dataItem in collection)
{
foreach (var col in grid.Columns)
{
var content = col.GetCellContent(dataItem);
if (content != null)
{
DataGridCell cell = content.Parent as DataGridCell;
// do whatever you need to do with the cell like setting cell.Background
}
}
}
答案 1 :(得分:0)
此代码可用于更改单元格的颜色。
void datagrid_LoadingRow()
{
var collection = datagrid.ItemsSource;
foreach (var dataItem in collection)
{
foreach (var col in datagrid.Columns)
{
var content1 = col.GetCellContent(dataItem);
if (content1 != null)
{
TextBlock block = content1 as TextBlock;
if (block != null)
{
DataGridCell cell = content1.Parent as DataGridCell;
string cellText = block.Text;
if (cellText == "True")
{
cell.Background = new SolidColorBrush(Colors.Green);
}
if (cellText == "False")
{
cell.Background = new SolidColorBrush(Colors.Red);
}
}
}
}
}
}