更改DataGridCell';从Silverlight 4中的代码隐藏中选择背景

更改DataGridCell';从Silverlight 4中的代码隐藏中选择背景,silverlight,datagrid,datagridcell,Silverlight,Datagrid,Datagridcell,我正在编写一个silverlight应用程序,它允许您通过输入的分隔符解析复制的文本。解析数据并将其放入网格后,用户可以“清理”数据。这会将单元格的当前值与列的允许值进行比较,选择其最佳猜测,并通过ItemsSource属性将数据重新绑定到网格 我的问题是,我知道每个被“擦洗”的单元格的坐标,我想突出显示该单元格或更改其背景色。在我看来,您可以单独设置DataGridCell的背景,但我无法访问DataGridCell。我可以访问网格的列和行,但它们似乎也不像我希望的那样提供对DataGridC

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


我的问题是,我知道每个被“擦洗”的单元格的坐标,我想突出显示该单元格或更改其背景色。在我看来,您可以单独设置DataGridCell的背景,但我无法访问DataGridCell。我可以访问网格的列和行,但它们似乎也不像我希望的那样提供对DataGridCell的访问。在设置ItemsSource之后,是否有人可以访问DataGridCell

如果在ItemsSource绑定到的集合中循环,则可以获取每一行并遍历列以获取内容和单元格-类似于这样(技巧是content.Parent作为DataGridCell):


如果循环遍历ItemsSource绑定到的集合,则可以获取每一行并遍历列以获取内容和单元格-类似于这样(技巧是content.Parent作为DataGridCell):


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

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


                }                  

            }
        }
    } 

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

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


                }                  

            }
        }
    } 

谢谢,这个很好用!(虽然现在silverlight中似乎应该有一些更直观的网格访问方法…)我完全同意你的观点,它应该更简单。谢谢,这很有效!(虽然现在silverlight中似乎应该有一些更直观的网格访问方法…)我完全同意你的看法,应该更简单。