我有一个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; }
}
答案 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
颜色。
如果我误解了你的问题,请告诉我。