0

DataGrid にバインドされているデータテーブルの行に応じて、DataGrid の ColumnHeader に色を付けたいと思います。しかし、どうすればこれを行うことができますか? Datagrid.Row で使用したメソッドは機能しません。これは、使用できる「列」プロパティが明らかに存在しないためです。

これを思いついたので、Colorconverter で DataGrid 全体を使用できますが、現在レンダリングされている Columnheader を特定する方法が見つかりません。

XAML:

   <DataGrid x:Name="excelDataTable_ExcelData">
        <Style TargetType="DataGridColumnHeader">
            <Setter Property="Background" Value="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Converter={StaticResource ExcelColumnColorConverter}}"></Setter>
        </Style>
    </DataGrid>

コード ビハインド カラーコンバーター:

public object Convert(object value, Type targetType, object parameter,   System.Globalization.CultureInfo culture)
{
    var col = (System.Data.DataColumn)value;
    var colStateObj = col.Table.Rows[col.Table.Rows.Count-1][col.ColumnName];
    Enums.RowState colorValue = (Enums.RowState)Enum.Parse(typeof(Enums.RowState), colStateObj.ToString());

    switch (colorValue)
    {
        case Enums.RowState.HeaderRow:
            return Brushes.Gainsboro;
        case Enums.RowState.isIncluded:
            return Brushes.LightGreen;
        case Enums.RowState.NotIncluded:
            return Brushes.LightSalmon;
        default:
            return Brushes.Azure;
    }
}

/// <summary>
/// Converts the value of the hidden Color row to a color on the Data table.
/// </summary>
/// <param name="value">The value</param>
/// <param name="targetType">The type of the binding target.</param>
/// <param name="parameter">The converter parameter.</param>
/// <param name="culture">The culture</param>
/// <returns>
/// EThe converted value or NULL
/// </returns>
/// <exception cref="System.NotImplementedException">Not implemented because it is not needed</exception>
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    throw new NotImplementedException();
}
4

1 に答える 1