IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Changer couleur listview SelectedItem


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 33
    Points : 22
    Points
    22
    Par défaut Changer couleur listview SelectedItem
    Bonjour à tous,

    J'ai une listview remplie par databinding.
    Je cherche à modifier par un style (en XAML) les propriétés Background et Foreground de :
    - la ligne en surbrillance (quand on passe la souris OnMouseOver)
    - l'élément sélectionné

    Je met ce que j'ai fait mais qui ne marche pas...
    Si vous pouvez m'aider s'il vous plait, toute aide est bienvenue.
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <Style x:Key="Liste" TargetType="ListView" >
                <Setter Property="Background" Value="Lavender"/>
                <Setter Property="BorderBrush" Value="Transparent"/>
                <Setter Property="BorderThickness" Value="0"/>
                <Style.Triggers>
                    <Trigger Property="SelectedItem" Value="True">
                        <Setter Property="Background" Value="Blue"/>
                        <Setter Property="Foreground" Value="White"/>
                    </Trigger>
                </Style.Triggers>
    </Style>

    J'ai vu en cherchant ceci :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    <Style TargetType="ListViewItem">
                <Style.Resources>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/>
     
                    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightBlue"/>
                </Style.Resources>
            </Style>
    Le problème est que ça ne marche pas.
    Est-ce que c'est parce que la liste est remplie par une datatable?

    Je vous met aussi la ligne de définition de la liste :
    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
     
    <ListView Name="ListBase" Grid.Column="0" Grid.Row="2" SelectionMode="Single" ItemsSource="{Binding}" VerticalAlignment="Top" 
    Style="{StaticResource Liste}">
                                        <ListView.ContextMenu>
                                            <ContextMenu>
                                                <MenuItem Header="Supprimer" Name="ctxMnu_Supprimer" Click="Suppr_Click"/>
                                            </ContextMenu>
                                        </ListView.ContextMenu>
                                        <ListView.Resources>
                                            <ResourceDictionary>
                                                <Style x:Key="hiddenStyle" TargetType="GridViewColumnHeader">
                                                    <Setter Property="Visibility" Value="Collapsed"/>
                                                </Style>
                                            </ResourceDictionary>
                                        </ListView.Resources>
                                        <ListView.View>
                                            <GridView AllowsColumnReorder="True">
                                                <GridViewColumn Header="ID" DisplayMemberBinding="{Binding Path=ID}" Width="0" HeaderContainerStyle="{StaticResource hiddenStyle}" />
                                                <GridViewColumn Header="Nom" Width="240"  DisplayMemberBinding="{Binding Path=Nom}" />
                                            </GridView>
                                        </ListView.View>
                                    </ListView>

    Merci à tous.

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    C'est sur le style des ListViewItem qu'il faut jouer en fait.

    Code xml : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <Style x:Key="ListViewItem1" TargetType="{x:Type ListViewItem}">
        ...
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListViewItem}">
                    <Border x:Name="Bd" Background="{TemplateBinding Background}" SnapsToDevicePixels="true" BorderThickness="0,0,0,1" BorderBrush="#6FBDE8">
                        <GridViewRowPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected"  Value="true">
                            <Setter TargetName="Bd" Property="BorderBrush" Value="#FF143c65" />
                            <Setter Property="Background" TargetName="Bd">
                                <Setter.Value>
                                    <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                                        <LinearGradientBrush.GradientStops>
                                            <GradientStopCollection>
                                                <GradientStop Color="#FF75aac7" Offset="0"/>
                                                <GradientStop Color="#FF143c65" Offset="1"/>
                                            </GradientStopCollection>
                                        </LinearGradientBrush.GradientStops>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="Bd" Property="Background" Value="#e0eff8" />
                        </Trigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsSelected" Value="true" />
                                <Condition Property="Selector.IsSelectionActive" Value="True" />
                            </MultiTrigger.Conditions>
                            <Setter Property="Background" TargetName="Bd">
                                <Setter.Value>
                                    <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                                        <LinearGradientBrush.GradientStops>
                                            <GradientStopCollection>
                                                <GradientStop Color="#FF75aac7" Offset="0"/>
                                                <GradientStop Color="#FF143c65" Offset="1"/>
                                            </GradientStopCollection>
                                        </LinearGradientBrush.GradientStops>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                            <Setter Property="BorderBrush" TargetName="Bd" Value="#FF143c65"/>
                            <Setter Property="Foreground" Value="White"/>
                        </MultiTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    Framework 4 -> voir dans ce lien

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Citation Envoyé par miky77
    J'ai vu en cherchant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    <Style TargetType="ListViewItem">
                <Style.Resources>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/>
     
                    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightBlue"/>
                </Style.Resources>
            </Style>
    Le problème est que ça ne marche pas.
    Est-ce que c'est parce que la liste est remplie par une datatable?
    Non, c'est pas lié. Ce code est une autre piste en effet, mais j'essaierai de l'appliquer au niveau des ressources de la ListView directement :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <ListView Name="ListBase" Grid.Column="0" Grid.Row="2" SelectionMode="Single" ItemsSource="{Binding}" VerticalAlignment="Top" 
    Style="{StaticResource Liste}">
      <ListView.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/>
     
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightBlue"/>
      </ListView.Resources>
     
      ...
     
    </ListView>

  4. #4
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Salut,

    Une bonne manière d'apprendre à manipuler les styles c'est d'utiliser le petit logiciel Kaxaml. En plus d'être un éditeur xaml, il contient des exemples simples de styles.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    J'ai téléchargé Kaxaml et je vais regarder ça.
    Merci beaucoup à vous.
    Bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Changer couleur texte dans un ListView
    Par bruno2356 dans le forum Composants graphiques
    Réponses: 6
    Dernier message: 10/04/2017, 17h22
  2. [VB.net] Changer couleur ligne DataGrid
    Par bguihal dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/07/2016, 06h54
  3. Changer couleur dun élément dans ListViewer
    Par jm49 dans le forum SWT/JFace
    Réponses: 6
    Dernier message: 15/04/2009, 10h26
  4. changer couleur d'une "case" selon clique
    Par Jéjé2reims dans le forum MFC
    Réponses: 4
    Dernier message: 05/02/2004, 12h19
  5. Couleur ListView
    Par YanK dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/02/2003, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo