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 :

Personnaliser une ListView en fonction des données ?


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 52
    Par défaut Personnaliser une ListView en fonction des données ?
    Bonjour à tous.

    J'ai cherché quelque chose sans trouver (je dois chercher mal). J'aimerais personnaliser ma Listview en fonction des données que je Databinde (verbe inventé pour l'occasion).

    En gros dans mes données Databindées, j'ai un booleen et selon la valeur de ce booléen j'aimerais que la couleur de fond de la ligne change.

    Pourriez vous me donner un coup de pouce ?

    Merci d'avance.

  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
    Par défaut
    Salut,

    tu peux jouer sur le style des ListViewItem. Avec un DataTrigger sur ta propriété (bool) :

    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
                <Style TargetType="{x:Type ListViewItem}">
     
                  <Setter Property="Control.Template">
                    <Setter.Value>
                      <ControlTemplate TargetType="ListViewItem">
                        <Border Name="Border" SnapsToDevicePixels="true" Background="Red" 
                        BorderThickness="0" >
                          <GridViewRowPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                                        OpacityMask="{x:Null}" />
                        </Border>
                        <ControlTemplate.Triggers>
     
                           <DataTrigger Binding="{Binding Path=TaPropriete}" Value="True" >
                            <Setter Property="Background" TargetName="Border" Value="Blue" />
                          </DataTrigger>
     
                       </ControlTemplate.Triggers>
                      </ControlTemplate>
                    </Setter.Value>
                  </Setter>
     
                </Style>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 52
    Par défaut
    Merci je vais voir avec ça.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 52
    Par défaut
    Cela marche parfaitement. Par contre du coup je perds mon feedback de Selection de Ligne classique lié à la Listview.

    Rajouter un Trigger dans le Style ? (EventTrigger ?)

  5. #5
    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
    Par défaut
    Oui moi j'ai mis que ce qui concernait la problématique.

    Le DataTrigger est ce qu'il faut ajouter pour obtenir ton comportement. Voici le style par défaut d'un ListViewItem :
    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
    		<Style x:Key="ListViewItemStyle1" TargetType="{x:Type ListViewItem}">
    			<Setter Property="Background" Value="Transparent"/>
    			<Setter Property="VerticalContentAlignment" Value="Center"/>
    			<Setter Property="Template">
    				<Setter.Value>
    					<ControlTemplate TargetType="{x:Type ListViewItem}">
    						<Border SnapsToDevicePixels="true" x:Name="Bd" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}">
    							<GridViewRowPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    						</Border>
    						<ControlTemplate.Triggers>
    							<Trigger Property="IsSelected" Value="true">
    								<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
    								<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
    							</Trigger>
    							<MultiTrigger>
    								<MultiTrigger.Conditions>
    									<Condition Property="IsSelected" Value="true"/>
    									<Condition Property="Selector.IsSelectionActive" Value="false"/>
    								</MultiTrigger.Conditions>
    								<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
    								<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
    							</MultiTrigger>
    							<Trigger Property="IsEnabled" Value="false">
    								<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
    							</Trigger>
    						</ControlTemplate.Triggers>
    					</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    		</Style>

    Ajoutes y le DataTrigger

  6. #6
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Moi j'aurai plutôt fait ça :
    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
     
            <Style TargetType="{x:Type ListViewItem}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=Content}" <!--ou TaPropriete-->
                                 Value="True">
                        <Setter Property="Background"
                                Value="Green">
                        </Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Path=Content}" <!--ou TaPropriete-->
                                 Value="False">
                        <Setter Property="Background"
                                Value="Red">
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 52
    Par défaut
    Tout simplement parfait...

    Merci pour tout. Ou peut on trouver un cours ou un tutorial sur ce genre de chose ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/08/2013, 21h58
  2. Réponses: 6
    Dernier message: 08/04/2013, 14h18
  3. Réponses: 2
    Dernier message: 04/05/2012, 07h50
  4. Réponses: 2
    Dernier message: 17/12/2009, 15h40
  5. Réponses: 2
    Dernier message: 17/05/2006, 08h35

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