2015-08-11 4 views
0

Это мой первый вопрос о stackoverflow, даже если я использую его с 2 лет. (Очень полезно). Так жаль, если это не задано правильно.WPF Datagrid CellFormatting event

Я перемещаю проект из WinForms в WPF, и у меня возникают некоторые проблемы. У меня есть datagrid, который автоматически заполняется при запросе SQL, и когда ячейки форматируют событие «DataGridViewCellFormatting», запускается. Я использую это событие, чтобы сделать цвет линии другим. (Более удобный)

Код на WinForm:

private void ChangerCouleur(object sender, DataGridViewCellFormattingEventArgs e) 
    { 
     DataGridViewRow row = dataGridView1.Rows[e.RowIndex]; 
     row.DefaultCellStyle.SelectionBackColor = Color.Orange; 
     row.DefaultCellStyle.SelectionForeColor = Color.Black; 
     if (e.RowIndex % 2 == 0) 
     { 
      row.DefaultCellStyle.BackColor = Color.Khaki; 
      row.DefaultCellStyle.ForeColor = Color.Black; 
     } 
     else 
     { 
      row.DefaultCellStyle.BackColor = Color.Goldenrod; 
      row.DefaultCellStyle.ForeColor = Color.Black; 
     } 
    } 

Я не могу найти то же событие в WPF.

Заранее спасибо

ответ

2

DataGridCell вместе с каждым WPF визуального элемента содержит Initialized событие. Для ваших целей это может быть то, что вы ищете. Существует также событие Loaded, если вам нужно взаимодействовать с вашим товаром после того, как оно было отправлено и отображено в первый раз .

Вы можете обнаружить, что вы можете достичь желаемого результата с помощью чисто XAML, используя DataGrid.AlternatingRowBackground:

<DataGrid RowBackground="Khaki" 
      AlternatingRowBackground="Goldenrod" 
      Foreground="Black"> 
    <DataGrid.Resources> 
     <Style TargetType="DataGridCell"> 
      <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
        <Setter Property="Background" Value="Orange"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.Resources> 
</DataGrid> 
+0

Спасибо большое, он работал, никогда не думал об этом. Я ужасен в XAML, я использовал весь GUI, используя Blend. : 3 – Quent

+0

Нет проблем. Рад, что это сработало. Я должен отметить, что если вы хотите, чтобы это поведение чередования использовалось для других типов 'ItemsControl' (например,' ListBox'), вы можете использовать метод Глена. Наслаждаться. – deloreyk

1

Глядя на ваш образец кода, я думаю, что вы хотите изменить цвет чередующихся строк?

Если да, то вы можете сделать это в XAML Stlye, как это:

<Style TargetType="{x:Type DataGrid}"> 
    <Setter Property="Background" Value="#FFF" /> 
    <Setter Property="AlternationCount" Value="2" /> 
</Style> 

<Style TargetType="{x:Type DataGridRow}"> 
    <Style.Triggers> 
     <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
      <Setter Property="Background" Value="Khaki"/> 
      <Setter Property="Foreground" Value="Black"/> 
     </Trigger> 
     <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
      <Setter Property="Background" Value="Goldenrod"/> 
      <Setter Property="Foreground" Value="Black"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

Спасибо за решение, а :) – Quent

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