Изменить фон DataGridCell из кода в Silverlight 4 - PullRequest
1 голос
/ 20 октября 2011

Я пишу приложение Silverlight, которое позволяет вам анализировать скопированный текст через введенные разделители. После того, как данные проанализированы и сброшены в сетку, пользователь может «очистить» данные. Это сравнивает текущее значение ячейки с допустимыми значениями для столбца, выбирает его наилучшее предположение и связывает данные с сеткой через свойство ItemsSource.

Моя проблема в том, что я знаю координаты каждой ячейки, которая была "очищена", и я хотел бы выделить эту ячейку или изменить ее цвет фона. Насколько я вижу, вы можете установить фон DataGridCell по отдельности, но у меня нет возможности получить доступ к DataGridCell. У меня есть доступ к столбцам и строкам таблицы, но они также не дают доступа к DataGridCell, как я и надеялся. У кого-нибудь есть способ получить доступ к DataGridCell после того, как был установлен ItemsSource?

Ответы [ 2 ]

5 голосов
/ 20 октября 2011

Если вы перебираете коллекцию, к которой привязан ваш ItemsSource, вы можете взять каждую строку и пройти по столбцам, получая содержимое и ячейку - что-то вроде этого (трюк с содержимым. Родитель как 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 голосов
/ 19 марта 2013

Этот код полезен для изменения цвета ячейки.

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


                }                  

            }
        }
    } 
...