2011-10-19 22 views
1

我正在编写一个silverlight应用程序,可让您通过输入的分隔符分析复制的文本。数据解析并放入网格后,用户可以“清理”数据。这将单元格的当前值与列的允许值进行比较,选择最佳猜测并通过ItemsSource属性将数据重新绑定到网格。在Silverlight 4中将DataGridCell的背景从代码隐藏改为

我的问题是,我知道已被“擦掉”的每个单元格的坐标,并且我想突出显示此单元格或更改其背景颜色。据我所见,你可以单独设置一个DataGridCell的背景,但我无法访问DataGridCell。我可以访问网格的列和行,但是这些也没有像我期望的那样访问DataGridCell。 ItemsSource被设置后,有没有人有办法访问DataGridCell?

回答

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 
    } 
    } 
} 
+0

谢谢,这个效果很好! (尽管现在在Silverlight中似乎应该有一些更直观的网格访问方法...) –

+0

我完全同意你的看法,它应该更容易。 –

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


       }     

      } 
     } 
    }