Silverlight4のCodebehindからDatagridcellの背景を変更する
-
27-10-2019 - |
質問
入力された区切り文字を介してコピーされたテキストを解析できる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);
}
}
}
}
}
}
所属していません StackOverflow