Bonjour,


Bonjour,

J'ai un DataGrid avec assez d'items dedans pour qu'une ScrollBar apparaisse. Quand on double clique sur ce DataGrid, il devient invisible (Collapsed) et 2 autres s'affiche :

- dans le 1er il y a la ligne sur laquelle on avait double cliqué,

- dans le 2e il y a une proposition de plusieurs éléments.

Le but est de lier une de ces propositions à l'élément sur lequel on double clic (cela crée un Dictionary).

Quand on revient en arrière, la ligne du DataGrid de base (celle sur laquelle on a cliqué) devient verte, pour indiquer à l'utilisateur qu'il a déjà traité cette ligne.

Mon problème : lorsque je scroll dans ce DataGrid, au moment ou la ligne n'est plus visible (donc quand je scroll assez pour ne plus la voir), une autre ligne se colore sans que je lui demande.

Exemple :

Nom : 14949579953091.png
Affichages : 26
Taille : 72,3 Ko

Donc on a une ligne qui est sélectionnée, et si on scroll :

Nom : 14949580429749.png
Affichages : 28
Taille : 71,8 Ko

Une autre ligne se colore "toute seule" lorsqu'on ne voit la ligne qu'on a colorée. Et si on remonte la ligne censée être colorée ne l'est plus.

Voici mon code XAML pour colorer mon DataGrid :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
<DataGrid Name="dataGridCSV" ItemsSource="{Binding}" IsReadOnly="True"  Height="550" Width="1200" HorizontalAlignment="Center" Margin="0,100,0,0" Visibility="Visible" ColumnWidth="auto"  AlternatingRowBackground="#e0e0e0" MouseDoubleClick="DataGridCSV_DoubleClick">
        <DataGrid.CellStyle>
                <Style TargetType="DataGridCell">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Path=Tag}" Value="ChangedBackground">
                            <Setter Property="Background" Value="Transparent" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
        </DataGrid.CellStyle>
</DataGrid>
Voici mon code C# relatif :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
private void ChangeColorDataGridCSV()
{
        var converter = new System.Windows.Media.BrushConverter();
        var brush = (Brush)converter.ConvertFromString("#78ea81");
        DataGridRow dataGridRow = dataGridCSV.ItemContainerGenerator.ContainerFromIndex(dataGridCSV.SelectedIndex) as DataGridRow;
        if (dataGridRow != null)
        {
            dataGridRow.Background = brush;
            dataGridRow.Tag = "ChangedBackground";
        }
 
}

Sauriez-vous me dire d'où ce problème provient et comment le résoudre ?

Merci beaucoup.