2013-12-09 197 views
0

我有一个DataGrid并需要在某些单元格上设置单独的背景颜色并更改所选单元格的颜色。 改变选择的颜色效果很好,如果尝试设置背景颜色而没有绑定它也可以。我认为我的绑定是错误的。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> 

我为填充DataGrid代码:

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应该是各行的颜色,但颜色始终是DataGrid的默认颜色。第一

public class CalenderWorkplanEntry 
{ 

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

} 

回答

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颜色。

如果我误解了您的问题,请让我知道。

+0

触发器工作正常,但下次我将使用您的方法。我的问题是在这一行:。我包含每一行的颜色,但每次显示默认颜色。 – Arne

+0

是的,那个'绑定'是无效的......你想绑定什么? CalenderWorkplanEntry中的 – Sheridan

+0

具有字符串StatusColor,我想将StatusColor绑定到style.setter。 – Arne

相关问题