根据DataGrid单元格的值(C#、WPF)设置其背景
本文关键字:WPF 设置 背景 单元格 DataGrid 根据 | 更新日期: 2023-09-27 18:07:23
(围绕这个主题也有类似的问题,但没有一个真正符合我的做法。(
我想根据DataGrid中每个单元格的值(从0到3的整数(来更改它们的颜色。目前,我可以通过鼠标悬停来改变细胞的颜色,使用这个:
<DataGrid Name="mapDisplay" ItemsSource="{Binding}" Margin="0,59,10,0">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
此代码将鼠标悬停在单元格上的所有单元格更改为"红色"。但是我怎么能根据它的价值改变颜色呢?
请参阅根据此答案的值更改DataGrid单元格颜色。
我用下面的代码尝试了答案中描述的相同方法,效果很好。
<Window.Resources>
<local:ColorConverter x:Key="NameToBrushConverter"/>
</Window.Resources>
<Grid>
<DataGrid ItemsSource="{Binding SampleList}" AutoGenerateColumns="False">
<DataGrid.Columns>
<!-- Inputs -->
<DataGridTextColumn Width="SizeToCells" Header="Inputs" MinWidth="100" Binding="{Binding RowNum}" >
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="{Binding RowNum, Converter={StaticResource NameToBrushConverter}}"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
转换器代码:
public class ColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var input = int.Parse(value.ToString());
switch (input)
{
case 1:
return Brushes.LightGreen;
case 2:
return Brushes.LightBlue;
case 3:
return Brushes.Yellow;
default:
return DependencyProperty.UnsetValue;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
希望这能有所帮助。
如果您的值范围是有限的,您可以使用下面的appoach在XAML中执行此操作。下面的代码假定您的属性名称为Status : int
,并且您只想更改包含的单元格,而不想更改整行。您也可以使用Header
属性来使用Column
名称,而不是DisplayIndex
。
<DataGrid x:Name="Dgrd">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Status}" Value="0"/>
<Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Blue"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Status}" Value="1"/>
<Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Red"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Status}" Value="2"/>
<Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Yellow"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Status}" Value="3"/>
<Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Olive"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
您也可以使用Converter
。