このお試しください: ヘルパー:
public class ColumnNameAttribute : Attribute
{
public string Name { get; set; }
public TextAlignment TextAlignment { get; set; }
public string Color { get; set; }
public bool IsReadOnly { get; set; }
public double MinWidth { get; set; }
/// <summary>
/// Helper to fill column attributes: header name, text alignment, editability and background color
/// </summary>
/// <param name="name"></param>
/// <param name="textAlignment"></param>
/// <param name="isReadOnly"></param>
/// <param name="color"></param>
public ColumnNameAttribute(string name, TextAlignment textAlignment = TextAlignment.Left, bool isReadOnly = true, string color = "White")
{
Name = name;
TextAlignment = textAlignment;
Color = color;
IsReadOnly = isReadOnly;
}
public ColumnNameAttribute(string name, double minWidth, TextAlignment textAlignment= TextAlignment.Left, bool isReadOnly = true, string color = "White")
{
Name = name;
TextAlignment = textAlignment;
IsReadOnly = isReadOnly;
Color = color;
}
}
xaml.cs:
datagrid.AutoGeneratingColumn += dataGrid_AutoGeneratingColumn;
private void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
var desc = e.PropertyDescriptor as PropertyDescriptor;
var att = desc.Attributes[typeof(ColumnNameAttribute)] as ColumnNameAttribute;
if (att != null)
{
e.Column.IsReadOnly = att.IsReadOnly;
e.Column.CellStyle = new Style(typeof(DataGridCell));
switch (att.Color)
{
case "LightGreen":
//BorderBrushProperty looks better
e.Column.CellStyle.Setters.Add(new Setter(BackgroundProperty, new SolidColorBrush(Colors.PaleGreen)));
e.Column.CellStyle.Setters.Add(new Setter(TextBox.ToolTipProperty, "<Enter value>"));
break;
}
e.Column.Header = att.Name;
e.Column.CellStyle.Setters.Add(new Setter(TextBlock.TextAlignmentProperty, att.TextAlignment));
if (att.MinWidth > 0) e.Column.MinWidth = att.MinWidth;
}
}
を
オブジェクトクラス:
public Example{
[ColumnName("My Custom Name", TextAlignment.Right, false, "LightGreen")]
public string Name {get; set;}
}
'DataGridCell'の暗黙のスタイルを作成し、コンバータを使用して背景色を設定します。コンバーターは行のデータ項目とセルがある列を知る必要があるので、おそらく 'MultiValueConverter'が必要です。コンバーターはデータ項目を 'DataGridRow'オブジェクトにキャストし、' Progress'セルを取得し、列に基づいてどの色を返すかを決める必要があります。代わりに、DataGrid用の適切なバッキングオブジェクトを作成し、これらのオブジェクトにデータを解析することもできます。これらのオブジェクトには、バインド可能な 'Color'プロパティが含まれています。私の好みは#2です。 – Rachel