我想根据ist值更改wpf数据网格中单元格的背景。我的数据网格如下:
<DataGrid x:Name="dataGridView_Comparison" ItemsSource="{Binding}" HorizontalAlignment="Stretch" AlternatingRowBackground="LightBlue" AlternationCount="2" Height="537" Margin="15,48,5,0" VerticalAlignment="Top" Width="1016" Background="#FF2C2727" Grid.ColumnSpan="2" Style="{DynamicResource DGHeaderStyle}" selectionUnit="FullRow">
我正在c#中动态创建此数据网格,因为列数始终根据输入而变化。做到这一点的代码部分是:
DataTable table = new DataTable();
table.Columns.Add("Column1", typeof(string));
foreach (string num in numbersList)
{
table.Columns.Add(num, typeof(string)); //Adding each numbers as a column in the table
}
foreach (string tc in uniqueCases)
{
DataRow newRow = table.NewRow();
newRow["Column1"] = tc+"_Case"; //Adding the case name of the row
foreach (string num in numbersList)
{
//For each number column add value corresponding to the condition..
newRow[num] = "0"; //Default value as 0
if (list_beforeThreshold.ContainsKey(num + tc) == true)
{
newRow[num] = "1";
}
if (list_afterThreshold.ContainsKey(num + tc) == true)
{
newRow[num] = "2";
}
table.Rows.Add(newRow);
}
dataGridView_Comparison.DataContext = table.DefaultView; //在wpf中添加到datagrid
我在C#和WPF中还很陌生。有人可以指导我如何根据它们的值(0,1,2)为单元格提供不同的颜色。 PS:我现在正在尝试数据触发。但没有任何进展。
编辑1:无法在xaml中对列号和列名进行硬编码,因为它们是在c#中动态填充的。
预先感谢
答案 0 :(得分:0)
此DataTrigger
应用于DataGrid
中的所有单元格。符合条件时,触发器将改变颜色;未满足条件时,触发器将变回颜色。
<DataGrid>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding Property}"
Value="True">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
答案 1 :(得分:0)
您可以使用 IValueConverter 更改背景颜色。
在xaml中定义Converter类:
<Window.Resources>
<local:NameToBrushConverter x:Key="NameToBrushConverter"/>
</Window.Resources>
<Grid>
<DataGrid x:Name="testDG" ItemsSource="{Binding tempData}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="{Binding Name, Converter={StaticResource NameToBrushConverter}}"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
转换器类别:
public class NameToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string input = value as string;
switch (input)
{
case "Smith":
return Brushes.LightGreen;
case "Willam":
return Brushes.LightPink;
default:
return DependencyProperty.UnsetValue;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
} }