Bonjour,
j'essaye d'animer le foreground d'un TextBlock a chaque fois que le texte change
Mon textblock est binde sur un objet metier qui lui meme est de type INotifyPropertyChanged.
J'ai ecrit 2 datatrigger pour gerer les changements de valeur .J'ai defini 2 varibales A et B qui passent alternativement a False et a True afin de declencher, a chaque changement de valeur au moins un datatrigger.
Mais cela ne fonctionne pas. Si on genere beaucoup de changements , il n'y a plus qu'un seul datatrigger qui se declenche.
Est-ce que vous avez une idee ?

Ca marche donc presque pour le Foreground mais je n'uy arrive pas avec le background ?

Avez-vous egalement une idee ou une meilleur solution ?

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
 
<Window.Resources>
        <local:Prix x:Key="prix"/>                
        <Style x:Key="s1" TargetType="{x:Type TextBlock}">         
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=A}" Value="True" >
                    <DataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>                                                                
                                <ColorAnimation From="Red" To="DarkGray"                                                          
                                                Duration="0:0:0.5"
                                                Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)"                                             
                                    />
                            </Storyboard>
                        </BeginStoryboard>
                    </DataTrigger.EnterActions>
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=B}" Value="True" >
                    <DataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <ColorAnimation From="Lime" To="DarkGray"                                                          
                                                Duration="0:0:0.5"
                                                Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)"                                             
                                    />
                            </Storyboard>
                        </BeginStoryboard>
                    </DataTrigger.EnterActions>
                </DataTrigger>
            </Style.Triggers>
        </Style>                
    </Window.Resources>
 
 
 
    <DockPanel DataContext="{Binding Source={StaticResource prix}}">                        
        <Button  Width="150"  Height="30" DockPanel.Dock="Top"  Content="Click" Click="Button_Click" />
        <TextBlock   Style="{StaticResource s1}"   
                     Foreground="DarkGray"
                     Background="Black"
                    Width="200"  
                    Height="200" 
                    FontSize="30"  
                    Text="{Binding Path=Valeur}"                        
                   >
        </TextBlock>
 
    </DockPanel>
et le code c#

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
53
54
55
56
57
58
59
60
 
public class Prix : INotifyPropertyChanged
    {
 
        private double valeur=1898;
        private bool a=false,b=true;
 
        //EstPair
        public bool A
        {
            get { return a; }
            set
            {
                this.a = value;
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs("A"));
 
            }
        }
        public bool B
        {
            get { return b; }
            set
            {
                this.b = value;
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs("B"));
 
            }
        }
 
 
 
        public double Valeur
        {
            get { return valeur; }
            set
            {
                this.valeur = value;
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs("Valeur"));
 
 
                A = !A;
                B = !B;
 
 
                Console.WriteLine("{0} {1} {2}", Valeur, A, B);
 
 
            }
        }
 
 
        #region INotifyPropertyChanged Members
 
        public event PropertyChangedEventHandler PropertyChanged;
 
        #endregion
    }
et le code du bouton
(FindResource("prix") as Prix).Valeur++;