2016-06-16 3 views
2

У меня есть DataGrid, который автоматически генерирует свои столбцы с кодом DataTable. Мне нужно изменить цвет фона строки, если столбец X имеет значение FALSE или что-то еще. Могу ли я это сделать с AutoGeneratingColumn="OnAutoGeneratingColumn" eventargs? Если нет, то как я могу изменить стиль строки, используя, возможно, DataTriggers доступ к значению столбца и повлиять на цвет фона строки?DataTriggers на основе имени столбца и его значения в WPF

EDIT 1: Прямой вопрос: как изменить цвет фона строки на основе значения в каком-то столбце?

EDIT 2: основе Генерирование Columns событие я могу сделать это:

EDIT 3: кодирование

public static void OnAutoGeneratingColumn(object sender, System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs e) 
     { 
      try { 

       if (e.PropertyType == typeof(System.DateTime) && e.Column.Header.ToString() != "Data de Registo") 
        (e.Column as System.Windows.Controls.DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy"; 

       if (e.PropertyType == typeof(System.DateTime) && e.Column.Header.ToString() == "Data de Registo") 
        (e.Column as System.Windows.Controls.DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy HH:mm:ss"; 
       if (e.Column.Header.ToString() == "FT") 
       { 
        StringReader stringReader = new StringReader("<Style xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"" 
         + " TargetType=\"{x:Type DataGridCell}\">" 
         + " <Setter Property=\"Background\" Value=\"Red\"/>" 
         + " </Style>"); 
        XmlReader xmlReader = XmlReader.Create(stringReader); 
        Style style = (Style)System.Windows.Markup.XamlReader.Load(xmlReader); 
        e.Column.CellStyle = style; 
       } 
      } 
      catch (Exception) { } 
     } 

Так что я изменил цвет фона столбца (его клетки), но то, что я хочу, проверяя его значение для каждой строки и делайте его красным, если значение X или зеленый, если значение Y.

+0

Нет ... совсем нет. – int3

+0

извините, удалил ... это не планировалось быть здесь :-) – Fruchtzwerg

ответ

3

Используйте Style и DataTrigger для DataGrid. Затем форматируйте в соответствии с элементом связанных данных.

<DataGrid.RowStyle> 
    <Style TargetType="{x:Type DataGridRow}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=<!--Your property name here-->}" 
         Value="False"> 
       <Setter Property="Background" Value="<!-- Your desired Brush here-->" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 

Если вы хотите получить доступ к индексатор по умолчанию свойства связанного элемента данных о, сделать ваш путь Path=[IndexerName] или Path=[(sys:Int32)0].

+0

Ты спас мне жизнь. Спасибо! Каждый раз, когда я использую «путь привязки», я имею в виду объект, который datagrid ссылается на право? – int3

+1

Когда вы устанавливаете стиль в 'DataGridRow' (следовательно,' DataGrid.RowStyle'), он будет использовать 'DataContext' этой строки. «DataContext» этой строки по логике «DataGrid» на самом деле является границей 'Row [i]' вашего 'DataTable'. – Adwaenyth

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