2013-04-08 2 views
2

У меня есть следующий DataGrid:Как изменить цвет строки DataGrid при обнаружении определенного значения?

<DataGrid AutoGenerateColumns="False" Name="dgPanelLogs"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="ID" SortMemberPath="ID" 
      x:Name="columnID" 
      Binding="{Binding Path=ID}" 
      IsReadOnly="True" 
      Width="50*" 
      SortDirection="Descending" > 
     </DataGridTextColumn> 

     <DataGridTextColumn Header="Time" SortMemberPath="Time" 
      x:Name="columnTime" 
      Binding="{Binding Path= Time, StringFormat='{}{0:dd/MM/yyyy HH:mm:ss}'}" 
      IsReadOnly="True" 
      Width="140*" 
      SortDirection="Descending"> 
     </DataGridTextColumn> 

     <DataGridTextColumn Header="Event" SortMemberPath="Event" 
      x:Name="columnMessage" 
      Binding="{Binding Path=Message}" 
      IsReadOnly="True" 
      Width="350*" 
      SortDirection="Descending" > 
     </DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 

Мое новое требование заключается в изменении строки в красный цвет, когда определенное значение встречается. В частности, я должен получить новое логическое значение с данными каждой строки, и если это правда, мне нужно установить текст этой строки на красный.

Каков наилучший способ для этого?

+0

Для уточнения, вы хотите установить всю строку, например. Красный. – DHN

+1

Да, в частности * текст * строки, поэтому на переднем плане каждой ячейки действительно. – DaveDev

+0

Это, конечно, не то же самое, что и в WinForms, например, через строки, окрашивающие фон ячеек. Я написал код, чтобы сделать это, и это ужасно - это работает, но это противно. Я поделюсь, если вы думаете, что можете использовать код, но правильным способом будет использование привязки данных/'Triggers' /' Commands' и т. Д. – MoonKnight

ответ

1

Лучший способ заключается в использовании стиль.

<DataGrid.Resources> 
    <Style TargetType="{x:Type DataGridRow}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Alarm}" Value="True"> 
       <Setter Property="Foreground" Value="Red" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.Resources> 

Я не могу проверить его сейчас. Я думаю, вам нужно установить RelativeSource для привязки.

+0

Я изменил этот ответ. Ваш код был * почти * правильным, поэтому я исправил опечатку и вложил код ' DaveDev

+0

О, хорошо, спасибо DaveDev – Andre

1

Я думаю, что следующие должности вам помогут.

link1: StackOverflow проблемы и ответить

link2: Styling и Templating

Смежные вопросы