更改整个行颜色,而不仅仅是单元格

时间:2013-11-29 17:46:55

标签: wpf datagrid

我在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,则它不会为任何单元格着色。

1 个答案:

答案 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个显示列的属性名称。