2011-10-19 4 views
1

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

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

答えて

5

あなたのItemsSourceにバインドされたコレクションをループ、あなたはその後、それぞれの行を取ることができ、コンテンツとセルなっカラムを通過した場合 - (トリックはDataGridCellとしてcontent.Parentである)このような何かを:

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

ありがとうございます、これはうまくいきます! (銀色でもっと直観的なグリッドアクセス方法があるはずですが...) –

+0

私はあなたに完全に同意します。 –

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


       }     

      } 
     } 
    } 
関連する問題