Bonjour à tous,

J'ai un soucis Xaml au sujet du design d'une de mes listview.
Dans cette listview je liste des interventions réalisées chez des clients.
Les items contiennent une date, le détail de l'intervention et la mention "Payé", "Impayé", "Gratuit"
Actuellement la couleur de la mention "Payé", "Impayé", "Gratuit" change en fonction du statut.

Voici le code de l'itemTemplate :

Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<ListView.ItemTemplate>
                <DataTemplate>
                    <Border BorderThickness="0,0,0,0.5" BorderBrush="{Binding paye, Converter={StaticResource statutConvertor}}">
                        <Grid Tapped="Grid_Tapped">
                            <FlyoutBase.AttachedFlyout>
                                <MenuFlyout Placement="BottomEdgeAlignedLeft">
                                    <MenuFlyoutItem Text="Editer" Click="MenuFlyoutEditerIntervention"/>
                                    <MenuFlyoutItem Text="Supprimer" Click="MenuFlyoutSupprimerIntervention"/>
                                </MenuFlyout>
                            </FlyoutBase.AttachedFlyout>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="auto"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="auto"/>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="auto"/>
                                <RowDefinition Height="auto"/>
                            </Grid.RowDefinitions>
 
                            <TextBlock x:Name="lblDateIntervention" Grid.Row="0" Grid.Column="0" Text="{Binding date}" FontSize="12" Margin="10,0,10,0"/>
                            <TextBlock x:Name="lblDetailIntervention" Grid.Row="1" Grid.ColumnSpan="2" Grid.Column="0" Text="{Binding detail}" FontSize="20" Margin="10,0,10,0" TextWrapping="Wrap"/>
                            <TextBlock Grid.Row="0" Grid.Column="1"/>
                            <TextBlock x:Name="lblPaye" Text="{Binding paye}" Foreground="{Binding paye, Converter={StaticResource statutConvertor}}" Grid.Column="2" Grid.Row="0" Grid.RowSpan="2" Margin="0,0,5,0" VerticalAlignment="Bottom" FontSize="12"/>
                        </Grid>
                    </Border>
                </DataTemplate>
            </ListView.ItemTemplate>
De manière temporaire j'ai rajouté une border dont j'arrive à changer la couleur via Binding.

Mais j'aimerai que ce soit le background du listViewItem qui change de couleur en fonction du statut de l'intervention.
Je rajoute que j'aimerai que le background de l'item soit un dégradé.

Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                    <Setter Property="Margin" Value="5,5,0,5"/>
                    <Setter Property="Padding" Value="0,5,5,5"/>
                    <Setter Property="Background" Value="{Binding paye, Converter={StaticResource statutConvertor}}"/>
                </Style>                
            </ListView.ItemContainerStyle>
Ici si je remplace dans Value le Binding par "Green" et bien cela fonctionne. Mais dés que je met le binding rien ne s'affiche.

Lors du débogage visualStudio me dit qu'il y aurait un soucis entre le fait que mon converter renvoie une Color alors que le dégradé que je voudrais serai de type brush.

(Je suis d'accord que dans le code fournit il n'y a pas de LinearGradiantBrush pour faire le dégradé. Mais mon problème n'est pas de savoir comment le faire mais plutôt pourquoi le binding ne fonctionne pas.

Je suis perdu.

Je vous place ici le converter statutConvertor :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class PayColorConvertor: IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            string statut = (value as string);
            if (statut == "Payé") return new SolidColorBrush(Colors.Green);
            else if (statut == "Impayé") return new SolidColorBrush(Colors.Red);
            else if (statut == "Gratuit") return new SolidColorBrush(Colors.CornflowerBlue);
 
            return new SolidColorBrush(Colors.White);
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, string language)
        {
            throw new NotImplementedException();
        }
    }
}
Je vous remercie pour votre aide.