質問

入力された区切り文字を介してコピーされたテキストを解析できるSilverlightアプリを書いています。データが解析され、グリッドにドロップされた後、ユーザーはデータを「スクラブ」する機能を持っています。これは、セルの現在の値を列の許可された値と比較し、その最良の推測を選択し、ItemsSourceプロパティを介してデータをグリッドに逆転させます。

私の問題は、「スクラブ」された各セルの座標を知っていることであり、このセルを強調したり、その背景色を変更したいと思います。私が見る限り、Datagridcellの背景を個別に設定することはできますが、Datagridcellにアクセスする方法はありません。グリッドの列と行にアクセスできますが、これらはまた、私が望んでいたようにDataGridcellにアクセスできるようには見えません。 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 
    }
  }
}

他のヒント

このコードは、セルの色を変更するのに役立ちます。

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


                }                  

            }
        }
    } 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top