1

我正在编写一个 silverlight 应用程序,它可以让您通过输入的分隔符解析复制的文本。在数据被解析并放入网格后,用户可以“擦洗”数据。这会将单元格的当前值与列的允许值进行比较,选择其最佳猜测并通过 ItemsSource 属性将数据重新绑定到网格。

我的问题是我知道每个被“擦洗”的单元格的坐标,我想突出显示这个单元格或更改它的背景颜色。据我所知,您可以单独设置 DataGridCell 的背景,但我无法访问 DataGridCell。我可以访问 Grid 的列和行,但这些似乎也没有像我希望的那样提供对 DataGridCell 的访问权限。设置 ItemsSource 后,是否有人可以访问 DataGridCell?

4

2 回答 2

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 
    }
  }
}
于 2011-10-20T02:15:50.017 回答
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);
                        }                            
                    }


                }                  

            }
        }
    } 
于 2013-03-19T15:45:33.527 回答