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 :

Faire clignoter une ligne d'un listview


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut Faire clignoter une ligne d'un listview
    Bonjour,

    Avez vous une idée de comment faire clignoter une ligne d'un listview suivant une valeur de binding?

    Actuellement je fait ceci pour changer les couleurs suivant les valeurs de mes données:

    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
    41
    42
     
    <ListView.ItemContainerStyle>
                    <Style TargetType="{x:Type ListViewItem}">
                        <Style.Triggers>
     
                            <DataTrigger Binding="{Binding Level}" Value="INFO">
                                <Setter Property="Background" Value="Transparent"/>
                            </DataTrigger>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding Path=Level}" Value="WARN" />
                                    <Condition Binding="{Binding Path=State}" Value="2" />
                                </MultiDataTrigger.Conditions>
                                <Setter Property="Background" Value="Orange" />
                            </MultiDataTrigger>
     
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding Path=Level}" Value="WARN" />
                                    <Condition Binding="{Binding Path=State}" Value="1" />
                                </MultiDataTrigger.Conditions>
                                <Setter Property="Background" Value="#c15d01" />
                            </MultiDataTrigger>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding Path=Level}" Value="FATAL" />
                                    <Condition Binding="{Binding Path=State}" Value="2" />
                                </MultiDataTrigger.Conditions>
                                <Setter Property="Background" Value="Red" />
                            </MultiDataTrigger>
     
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding Path=Level}" Value="FATAL" />
                                    <Condition Binding="{Binding Path=State}" Value="1" />
                                </MultiDataTrigger.Conditions>
                                <Setter Property="Background" Value="#900000" />
                            </MultiDataTrigger>
                        </Style.Triggers>
                        <Setter Property="Height" Value="35" />
                    </Style>
                </ListView.ItemContainerStyle>
    Merci de votre aide

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    Bonjour

    Au lieu d'injecter dans les MultiDataTrigger un setter tu devrais y injecter MultiDataTrigger.EnterActions & MultiDataTrigger.ExitActions
    Demarrer simplement un storyboard en ressources ciblant un ListViewItem..
    Le storyboard peut animer l'opacite ,la forme du Listviewitem ou ...que sais-je..
    Voici un "feux clignotement qui fait "fretiller" les couleurs avec un DiscreteColorKeyFrame("saut brusque") avec des keytime courts...
    bref voici le code xaml:
    [code]
    <Window x:Class="WpfBlinkListView.WinListViewColorAnimation"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfBlinkListView"
    Title="WinListViewColorAnimation" Height="300" Width="300">
    <Window.Resources>
    <local:Blinks x:Key="l"></local:Blinks>

    <!--ICI LE STORYBOARD WARN -->

    <Storyboard
    x:Key="colorAnimWARN" >
    <ColorAnimationUsingKeyFrames
    Storyboard.TargetProperty="(ListViewItem.Background).(SolidColorBrush.Color)"
    Duration="0:0:3"
    RepeatBehavior="Forever">
    <DiscreteColorKeyFrame Value="Transparent" KeyTime="0:0:0.0" />
    <DiscreteColorKeyFrame Value="RoyalBlue" KeyTime="0:0:1.0" />
    <DiscreteColorKeyFrame Value="Red" KeyTime="0:0:2.0" />
    </ColorAnimationUsingKeyFrames>
    </Storyboard>
    <!--ICI LE STORYBOARD FATAL -->

    <Storyboard
    x:Key="colorAnimFATAL" >
    <ColorAnimationUsingKeyFrames
    Storyboard.TargetProperty="(ListViewItem.Background).(SolidColorBrush.Color)"
    Duration="0:0:3"
    FillBehavior="HoldEnd"
    RepeatBehavior="Forever">
    <DiscreteColorKeyFrame Value="Transparent" KeyTime="0:0:0.0" />
    <DiscreteColorKeyFrame Value="LimeGreen" KeyTime="0:0:1.0" />
    <DiscreteColorKeyFrame Value="Red" KeyTime="0:0:2.0" />
    </ColorAnimationUsingKeyFrames>
    </Storyboard>

    <!--ICI LE ItemContainerStyle-->

    <Style
    x:Key="st"
    TargetType="{x:Type ListViewItem}"
    >
    <Style.Triggers>
    <DataTrigger
    Binding="{Binding Level}"
    Value="INFO">
    <Setter Property="Background" Value="Transparent"/>
    </DataTrigger>
    <MultiDataTrigger>
    <MultiDataTrigger.Conditions>
    <Condition Binding="{Binding Path=Level}" Value="WARN" />
    <Condition Binding="{Binding Path=State}" Value="2" />
    </MultiDataTrigger.Conditions>
    <!--vire tous ces setters-->
    <!--<Setter Property="Background" Value="Orange" />-->
    <MultiDataTrigger.EnterActions>
    <BeginStoryboard
    Storyboard="{Binding Source={StaticResource colorAnimWARN}}">
    </BeginStoryboard>
    </MultiDataTrigger.EnterActions>
    <MultiDataTrigger.ExitActions >
    <BeginStoryboard
    Storyboard="{Binding Source={StaticResource colorAnimWARN}}">
    </BeginStoryboard>
    </MultiDataTrigger.ExitActions>
    </MultiDataTrigger>

    <MultiDataTrigger>
    <MultiDataTrigger.Conditions>
    <Condition Binding="{Binding Path=Level}" Value="WARN" />
    <Condition Binding="{Binding Path=State}" Value="1" />
    </MultiDataTrigger.Conditions>
    <!--<Setter Property="Background" Value="#c15d01" />-->
    <MultiDataTrigger.EnterActions>
    <BeginStoryboard
    Storyboard="{Binding Source={StaticResource colorAnimWARN}}">
    </BeginStoryboard>
    </MultiDataTrigger.EnterActions>
    <MultiDataTrigger.ExitActions >
    <BeginStoryboard
    Storyboard="{Binding Source={StaticResource colorAnimWARN}}">
    </BeginStoryboard>
    </MultiDataTrigger.ExitActions>
    </MultiDataTrigger>
    <MultiDataTrigger>
    <MultiDataTrigger.Conditions>
    <Condition Binding="{Binding Path=Level}" Value="FATAL" />
    <Condition Binding="{Binding Path=State}" Value="2" />
    </MultiDataTrigger.Conditions>
    <!--<Setter Property="Background" Value="Red" />-->
    <MultiDataTrigger.EnterActions>
    <BeginStoryboard
    Storyboard="{Binding Source={StaticResource colorAnimFATAL}}">
    </BeginStoryboard>
    </MultiDataTrigger.EnterActions>
    <MultiDataTrigger.ExitActions >
    <BeginStoryboard
    Storyboard="{Binding Source={StaticResource colorAnimFATAL}}">
    </BeginStoryboard>
    </MultiDataTrigger.ExitActions>
    </MultiDataTrigger>

    <MultiDataTrigger>
    <MultiDataTrigger.Conditions>
    <Condition Binding="{Binding Path=Level}" Value="FATAL" />
    <Condition Binding="{Binding Path=State}" Value="1" />
    </MultiDataTrigger.Conditions>
    <!--<Setter Property="Background" Value="#900000" />-->
    <MultiDataTrigger.EnterActions>
    <BeginStoryboard
    Storyboard="{Binding Source={StaticResource colorAnimFATAL}}">
    </BeginStoryboard>
    </MultiDataTrigger.EnterActions>
    <MultiDataTrigger.ExitActions >
    <BeginStoryboard
    Storyboard="{Binding Source={StaticResource colorAnimFATAL}}">
    </BeginStoryboard>
    </MultiDataTrigger.ExitActions>
    </MultiDataTrigger>
    </Style.Triggers>
    <Setter Property="Height" Value="35" />
    </Style>
    </Window.Resources>
    <StackPanel>
    <ListView
    Height="200"
    IsSynchronizedWithCurrentItem="True"
    ItemContainerStyle="{StaticResource st}"
    ItemsSource="{Binding Source={StaticResource l}}">
    <ListView.View >
    <GridView
    AllowsColumnReorder="true">
    <GridViewColumn
    x:Name="col1"
    Header="Level" Width="100"
    DisplayMemberBinding="{Binding Path=Level}" >
    </GridViewColumn>
    <GridViewColumn
    Header="State" Width="100"
    DisplayMemberBinding="{Binding Path=State}">
    </GridViewColumn>
    </GridView>
    </ListView.View>
    </ListView>

    </StackPanel>
    </Window>

    [CODE]
    Le code behind .cs du class Blink de test:
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections.ObjectModel;
     
    namespace WpfBlinkListView
    {
        public class Blink
        {
            public Blink(string  l,int s)  
            {  
     
                Level =l;
                State =s ;
     
            }
            public string Level { get; set; }
            public int State { get; set; }
     
        }
        public class Blinks : ObservableCollection<Blink>
        {
            private Blink b;
     
            public Blinks()
            {
                for (int i = 1; i < 21; i++)
                {
                    if (i % 5 == 0)
                    {
     
                        b = new Blink("FATAL", 2);
     
                    }
                    else if (i % 2 == 0)
                    {
                        b = new Blink("WARN", 1);
     
                    }
                    else
                    {
                        b = new Blink("INFO", 1);
     
     
                    }
                    this.Add(b);
                }
            }
        }
    }
    bon code....

  3. #3
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut
    Merci de ton code
    Je teste cela demain

Discussions similaires

  1. Faire clignoter une ligne d'un dbGrid
    Par franck SEFIC dans le forum Composants VCL
    Réponses: 11
    Dernier message: 01/04/2009, 19h46
  2. Faire clignoter une seule ligne dans une listbox ?
    Par tonton67 dans le forum C++Builder
    Réponses: 4
    Dernier message: 20/09/2008, 22h05
  3. Faire Clignoter une ligne d'une Flexgrid
    Par ecarbill dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 20/03/2007, 14h55
  4. Réponses: 2
    Dernier message: 13/12/2004, 15h16
  5. [VB6]Changer la couleur d'une ligne d'un ListView
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/03/2003, 17h02

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