Datagrid单元格背景颜色绑定

时间:2013-12-09 12:15:31

标签: c# wpf binding datagrid background

我有一个DataGrid,需要在某些单元格上设置单独的背景颜色,并在选择时更改单元格的颜色。 更改选择的颜色效果很好,如果尝试设置背景颜色而不绑定也可以。我认为我的绑定是错误的。

因此我在xaml中使用了这段代码

<Style TargetType="{x:Type DataGridCell}" x:Key="NumberCell">

        <Style.Setters>
            <Setter Property="Background" Value="{Binding RelativeSource={RelativeSource FindAncestor},Path=StatusColor}"></Setter>
        </Style.Setters>
        <Style.Triggers>
            <Trigger Property="DataGridCell.IsSelected" Value="True" >
                <Setter Property="Background" Value="{StaticResource LoudBrush}" />
                <Setter Property="BorderBrush" Value="{StaticResource LoudBrush}" />
                <Setter Property="VerticalContentAlignment" Value="Center" />
            </Trigger>
        </Style.Triggers>
    </Style>

我填充数据网格的代码:

private void AddColumns(DataGrid dataGrid, IEnumerable<User> Users)
    {


       var columnsAmount =  dataGrid.Columns.Count;
       if(columnsAmount > 1)
       {
           var dayColumnKepper = dataGrid.Columns[0];
           dataGrid.Columns.Clear();
           dataGrid.Columns.Insert(0, dayColumnKepper);
       }

        foreach(var user in Users)
        {
            var column = new DataGridTextColumn();
            column.Binding = new Binding(string.Format("UserWorkplan[{0}].Appointment.Type", user.Id));
            column.Header = user.Username;
            column.CellStyle = (Style)Resources["NumberCell"];
            dataGrid.Columns.Insert(1, column);
        }
    }

public IDictionary<int, CalenderWorkplanEntry> UserWorkplan { get; set; }

StatusColor应该是单个行的颜色,但颜色始终是数据网格的默认颜色。

public class CalenderWorkplanEntry
{

    public string Fullname { get; set; }
    public int UserId { get; set; }
    public string StatusColor { get; set; }
    public WorkPlanAppointment Appointment { get; set; }

}

1 个答案:

答案 0 :(得分:1)

首先要做的事情......请帮自己一个忙,并且操纵后面代码中的UI对象。绑定到集合控件的正确方法是实现INotifyPropertyChanged接口,定义公共ObservableCollection<T>属性并将数据绑定到DataGrid.ItemsSource属性:

<DataGrid ItemsSource="{Binding Items}" />

接下来,要删除默认选择颜色,请将其添加到Resources部分:

<DataGrid.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
    <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
</DataGrid.Resources>

您可以使用这些颜色来满足您的要求,或者只是将它们保留为Transparent,这样它们就不会隐藏您的Trigger颜色。

如果我误解了你的问题,请告诉我。