1

入力した区切り文字を使用してコピーしたテキストを解析できるSilverlightアプリを作成しています。データが解析されてグリッドにドロップされた後、ユーザーはデータを「スクラブ」することができます。これにより、セルの現在の値が列の許可された値と比較され、最適な推測が選択され、ItemsSourceプロパティを介してデータがグリッドに再バインドされます。

私の問題は、「スクラブ」された各セルの座標がわかっていることです。このセルを強調表示するか、背景色を変更したいと思います。私が見る限り、DataGridCellの背景を個別に設定できますが、DataGridCellにアクセスする方法がありません。グリッドの列と行にアクセスできますが、期待どおりにDataGridCellにアクセスできないようです。ItemsSourceが設定された後にDataGridCellにアクセスする方法はありますか?

4

2 に答える 2

5

ItemsSourceがバインドされているコレクションをループする場合は、各行を取得して列を調べ、コンテンツとセルを取得できます。これは次のようになります(トリックはcontent.Parent as 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 
    }
  }
}
于 2011-10-20T02:15:50.017 に答える
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);
                        }                            
                    }


                }                  

            }
        }
    } 
于 2013-03-19T15:45:33.527 に答える