我在xaml中有以下代码:
<DataGrid Name="DgAlarmsGrid" AutoGenerateColumns="True" Grid.Row="1"
HorizontalAlignment="Stretch" Margin="5,29,5,10"
VerticalAlignment="Stretch" RenderTransformOrigin="0.517,0.861" Grid.RowSpan="2" ItemsSource="{Binding Items}">
<DataGrid.Resources>
<pagingDemo:ValueColorConverter x:Key="Colorconverter"/>
</DataGrid.Resources>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Column.DisplayIndex}" Value="10">
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=Content.Text, Converter={StaticResource Colorconverter}}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
这节课:
public class ValueColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var str = value as string;
if (str == null) return null;
int intValue;
if (!int.TryParse(str, out intValue)) return null;
if (intValue < 0) return (MainWindow.AlarmColours[256]);
return (intValue > 255) ? null : (MainWindow.AlarmColours[intValue]);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
根据其值,正确地为单元格的背景着色。但我需要为整行着色,但我不能让它发挥作用。如果我将CellStyle更改为RowStyle并将TargetType更改为DataGridRow,则它不会为任何单元格着色。
答案 0 :(得分:1)
如果我理解正确,你会尝试根据某些列中的值来设置行的颜色。
它不适用于DataGridRow的原因是它不包含Column.DisplayIndex属性。
您可以尝试以下操作。
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background" Value="{Binding Path=yourPropertyName, Converter={StaticResource vjColorConverter}}"></Setter>
</Style>
</DataGrid.RowStyle>
不是试图从列的内容中读取值,而是直接从DataContext本身获取它。 DataContext是DataGrid绑定到的行,用于填充行。对于您的情况,它是第11个显示列的属性名称。