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 :

[WPF] Masque de sélection d'une ListBox


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut [WPF] Masque de sélection d'une ListBox
    Salut

    Est-il possible de contrôler comment est affiché le masque de sélection d'une ListBox ? Je m'explique : quand on sélectionne un élément dans une liste, il est mis en valeur par un masque qui modifie les couleurs.

    Dans mon appli, j'ai une ListBox avec des datatemplates alternatifs pour les items. Mais quand je sélectionne un élément dans la liste, seul le texte change de couleur, pas le fond (cf. screenshot)... Donc quand je sélectionne un élément avec un texte noir sur fond blanc, le texte devient blanc donc invisible... je voudrais inverser la couleur de fond.

    Je ne vois pas trop comment faire, d'où ma question sur le masque de sélection...

    Pour info, voici le code XAML des templates :
    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
     
            <DataTemplate x:Key="tmplDVD">
                <Border CornerRadius="5" BorderThickness="1" BorderBrush="Blue"
                        Margin="3" Background="White">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="75" />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <Image Grid.Column="0" Source="{Binding Cover}" Width="75" Height="100" Stretch="Uniform" />
                        <StackPanel Grid.Column="1" Orientation="Vertical" VerticalAlignment="Center">
                            <TextBlock FontSize="16" FontWeight="Bold" Text="{Binding Title}" />
                            <TextBlock Text="{Binding Year}" />
                            <TextBlock Text="{Binding Director.Name}" />
                        </StackPanel>
                    </Grid>
                </Border>
            </DataTemplate>
     
            <DataTemplate x:Key="tmplDVDAlt">
                <Border CornerRadius="5" BorderThickness="1" BorderBrush="Blue"
                        Margin="3" Background="LightGray">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="75" />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <Image Grid.Column="0" Source="{Binding Cover}" Width="75" Height="100" Stretch="Uniform" />
                        <StackPanel Grid.Column="1" Orientation="Vertical" VerticalAlignment="Center">
                            <TextBlock FontSize="16" FontWeight="Bold" Text="{Binding Title}" />
                            <TextBlock Text="{Binding Year}" />
                            <TextBlock Text="{Binding Director.Name}" />
                        </StackPanel>
                    </Grid>
                </Border>
            </DataTemplate>
    Images attachées Images attachées  

  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
    Oui, il me semble que c'est possible en jouant sur une des propriétés de la ListView mais je me rappelle plus laquelle

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    c'est aussi ce que je pensais, mais je n'en vois aucune qui semble correspondre...
    En attendant, j'ai résolu mon problème en jouant sur la transparence

  4. #4
    Membre chevronné
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Par défaut
    Tu peux définir un style ainsi :
    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="SelectedListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                                <Border x:Name="Border">
                                    <ContentPresenter/>
                                </Border>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsSelected" Value="True">
                                        <Setter Property="Background" Value="sc#1, 1, 0, 0" TargetName="Border"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
    Que tu affectes à ta ListBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ItemContainerStyle="{DynamicResource SelectedListBoxItemStyle}"
    Mais cela nécessite je crois que tu retires la propriété Background de l'élément Border de ton DataTemplate.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ah oui, j'avais vu cette propriété ItemContainerStyle, mais elle n'est pas très bien documentée, et je n'avais pas bien compris comment l'utiliser...
    Merci de ta réponse, je vais tester ça...

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

Discussions similaires

  1. Sélection dans une Listbox
    Par lesultan2007 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 09/07/2008, 12h43
  2. lister répertoire selon sélection dans une listbox
    Par gorgoroth dans le forum Langage
    Réponses: 12
    Dernier message: 03/06/2008, 17h06
  3. [WPF] Imprimer sur plusieurs pages une ListBox
    Par UNi[FR] dans le forum C#
    Réponses: 1
    Dernier message: 04/12/2007, 14h42
  4. Problème de sélection dans une listbox
    Par cacahuèèète dans le forum Access
    Réponses: 3
    Dernier message: 29/06/2006, 15h03
  5. Sélection dans une ListBox
    Par LoicH dans le forum C++Builder
    Réponses: 2
    Dernier message: 16/04/2005, 22h13

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