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 :

[XAML/ListView] Comment modifier le SelectedItem Background ?


Sujet :

Windows Presentation Foundation

  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Par défaut [XAML/ListView] Comment modifier le SelectedItem Background ?
    Bonjour à tous,

    Dans mon appli WPF, j'utilise un ListView. Je voudrai supprimer la couleur par défaut (bleu) de sélection lorsqu'on clique sur un item, pour la remplacer par autre chose (par exemple une bordure rouge sur l'item).

    J'utilise déjà un Converter sur la propriété Background afin d'avoir des couleurs alternées pour mes items.

    Voilà le Style XAML :

    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
    <Style x:Key="MyContainer" TargetType="{x:Type ListViewItem}">
          <Style.Resources>
            <!--<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Pink"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Pink"/>-->
          </Style.Resources>
          <Setter Property="Margin" Value="0,1,0,0"/>
          <Setter Property="Height" Value="21"/>
          <Style.Triggers>          
            <Trigger Property="IsSelected" Value="false">
              <Setter Property="Background">
                <Setter.Value>
                   <Binding RelativeSource="{RelativeSource Self}" Converter="{StaticResource BackgroundConverter}"/>
                </Setter.Value>
              </Setter>
            </Trigger>        
          </Style.Triggers>
        </Style>
    Comme on peut le voir, avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            <!--<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Pink"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Pink"/>-->
    je peux changer la couleur de sélection (le bleu dont je parle quand on clique une fois sur un item), mais je ne sais pas comment m'y prendre pour ne pas changer du tout la couleur - et ainsi conserver mon alternance de couleur entre les items.

    Merci d'avance,
    Jérem

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Heu... je dois admettre que je ne suis pas sur d'avoir tout à fait compris ton pb...

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Par défaut
    Je vais essayer d'être plus clair.

    Prenons un ListView, avec des ListViewItem dedans. Quand on clique une fois sur un items, le background de cet item devient bleu, pour montrer la sélection.

    Je voudrai changer cela, c'est à dire ne pas changer la couleur d'arrière plan de l'item, mais le dessiner autrement, par exemple avec une bordure rouge.

    J'espère avoir été clair, sinon, je veux bien mettre un ptit dessin si y'a besoin

    Merci

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Tu fais un Trigger pour savoir si l'item a le focus (IsFocused = True) et en fonction de cela, tu appliques le template que tu veux

  5. #5
    Membre très actif
    Avatar de UNi[FR]
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 340
    Par défaut
    Pour la selection d'un ListView la propriété ce n'est pas IsSelected ?

    Jérem22 tu pourras mettre le code dés que tu y arrive STP ?

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Possible mais attention, ce n'est pas parce qu'un contrôle a le focus qu'il est sélectionné

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Par défaut
    J'ai finalement réussis... Voilà le code XAML du style que j'utilise :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    <Style x:Key="MyContainer" TargetType ="ListViewItem">
          <Setter Property ="Template">
            <Setter.Value>
              <ControlTemplate TargetType ="{x:Type ListViewItem}">
                <Grid Background ="{TemplateBinding Background}">
                  <GridViewRowPresenter x:Name="ItemContent" Focusable="False"   Grid.Row="0">
                  </GridViewRowPresenter>
                </Grid>
                <ControlTemplate.Triggers>
                  <Trigger Property="IsMouseOver" Value="true">
                    <Setter Property="Foreground" Value="Blue" />
                    <Setter Property="Background">
                      <Setter.Value>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                          <GradientStop Color="#FFFFC704" Offset="0.986"/>
                          <GradientStop Color="#FFF4E057" Offset="0.5"/>
                          <GradientStop Color="#FFF4E057" Offset="0.51"/>
                        </LinearGradientBrush>
                      </Setter.Value>
                    </Setter>
                    <Setter Property="FontSize" Value="12"/>
                  </Trigger>
                </ControlTemplate.Triggers>
              </ControlTemplate>
            </Setter.Value>
          </Setter>
          <Setter Property="Background">
            <Setter.Value>
              <Binding RelativeSource="{RelativeSource Self}" Converter="{StaticResource BackgroundConverter}"/>
            </Setter.Value>
          </Setter>
          <Setter
            Property="HorizontalContentAlignment"
            Value="Stretch" />
          <Setter
            Property="VerticalContentAlignment"
            Value="Stretch" />
          <Setter Property ="Height" Value ="30" />
        </Style>

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Par défaut Un peu de 'Style'
    Si non, tout simplement, dans le style de ta listView tu redéfinis les couleurs suivantes:

    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>

  9. #9
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par _juju_ Voir le message
    Si non, tout simplement, dans le style de ta listView tu redéfinis les couleurs suivantes:

    <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>

    Effectivement: je viens tout juste de le faire pour un projet et ca marche nickel

  10. #10
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 34
    Par défaut
    En changeant les couleurs sur transparent,il reste malgré tout le contour de pointillé qui symbolise la sélection ,est il possible aussi de le cacher ?

    J'applique un bitmap effect sur l'item sélectionné ,et ces pointillés m'embêtent beaucoup.

  11. #11
    Membre éprouvé Avatar de Thrud
    Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par défaut
    pour le contour pointillé, c'est la propriété 'FocusVisualStyle' qu'il faut mettre à null dans ton style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/06/2011, 13h12
  2. [WPF/Listview] Comment développer rapidement en Xaml un Detailview ?
    Par jacpapac dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 05/12/2008, 13h58
  3. [Blend] Comment modifier l'apparence d'une Listview ?
    Par vhellers dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 04/09/2008, 21h35
  4. Réponses: 3
    Dernier message: 16/01/2008, 11h45
  5. Comment modifier hauteur d'une listview svp ?
    Par windowsxx2001 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/06/2006, 18h34

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