2013-12-09 248 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

相關問題