Frage

Ich schreibe eine Silverlight -App, mit der Sie kopierten Text über eingegebene Grenzwerte analysieren können. Nachdem die Daten analysiert und in das Netz fallen gelassen wurden, kann der Benutzer die Daten "schrubben". Dies vergleicht den aktuellen Wert einer Zelle mit den zulässigen Werten für die Spalte, wählt ihre besten Vermutungen aus und reserviert die Daten über die ElementSource -Eigenschaft in das Netz.

Mein Problem ist, dass ich die Koordinaten jeder Zelle kenne, die "geschrubbt" wurden, und ich möchte diese Zelle hervorheben oder ihre Hintergrundfarbe ändern. Soweit ich sehen kann, können Sie den Hintergrund eines Datagridcell einzeln festlegen, aber ich habe keine Möglichkeit, auf die DataGridcell zuzugreifen. Ich habe Zugriff auf die Spalten und Zeilen des Netzes, aber diese scheinen auch keinen Zugriff auf die DataGridcell zu gewähren, wie ich es mir erhofft hatte. Hat jemand eine Möglichkeit, auf eine DataGridcell zuzugreifen, nachdem die ElementSource festgelegt wurde?

War es hilfreich?

Lösung

Wenn Sie die Sammlung durchlaufen, an die Ihre ItemSource gebunden ist, können Sie jede Zeile nehmen und die Spalten durchgehen, die den Inhalt und die Zelle erhalten - so etwas wie dieser (Trick ist der Inhalt. Parent als 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 
    }
  }
}

Andere Tipps

Dieser Code ist nützlich, um die Farbe der Zelle zu ändern.

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


                }                  

            }
        }
    } 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top