【问题标题】:Change a DataGridCell's background from the codebehind in Silverlight 4从 Silverlight 4 中的代码更改 DataGrid 单元格背景
【发布时间】:2011-10-19 22:08:29
【问题描述】:

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

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

【问题讨论】:

    标签: silverlight datagrid datagridcell


    【解决方案1】:

    如果您遍历您的 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 
        }
      }
    }
    

    【讨论】:

    • 谢谢,这很好用! (虽然现在 Silverlight 中似乎应该有一些更直观的网格访问方法......)
    • 我完全同意你的看法,应该更容易。
    【解决方案2】:

    此代码可用于更改单元格的颜色。

    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-01-14
      • 2018-09-26
      • 2011-05-14
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 2013-01-28
      • 2010-09-24
      • 1970-01-01
      相关资源
      最近更新 更多