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 ?
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 <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 du bouton
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 }
(FindResource("prix") as Prix).Valeur++;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Merci
Partager