Bonsoir,
je reviens sur le code de mon carrousel,
Après bien des difficultés pour assimiler les mécanismes de measureoverride et arrangeoverride, j'ai , grâce à votre aide, réussi à afficher correctement mes images selon une ellipse
Maintenant je désire les animer . pour cela j'ai réé un dispacherTimer avec un évent lié dont voici le code
les instructions liées à la gestion de l’évènement sont les suivantes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 private readonly DispatcherTimer _time = new DispatcherTimer(); _time.Tick += new EventHandler(_time_Tick); this._time.Interval = new TimeSpan(100); this._time.Start();
Mon attention via ce code est de modifier régulièrement la valeur de mon angle de base et d'afficher la nouvelle disposition des mes photos via les deux méthodes "measureoverride et arrangeoverride
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 private void _time_Tick(object sender, EventArgs e) { _angle=_angle + 2*Math.PI/360; this.MeasureOverride(new Size(this.Width,this.Height )); }
A mon grand désespoir mes images ne se déplacent pas bien qu'aucun message d'erreur ne soit signaé
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 protected override Size MeasureOverride(Size availableSize) { foreach (UIElement child in InternalChildren) { child.Measure(availableSize); } Size desiredSize = new Size(500,500); return desiredSize; } protected override Size ArrangeOverride(Size finalSize) { Double angle = _angle; Double e = Math.Sqrt(1 - Math.Pow(RadiusY / RadiusX, 2)); foreach (Image child in InternalChildren) { double p = RadiusY / (Math.Sqrt(1 - Math.Pow(e, 2) * Math.Pow(Math.Cos(angle), 2))); double x = p * Math.Cos(angle); double y = p * Math.Sin(angle); child.Arrange(new Rect (RadiusX+x,RadiusY+y,200, 200)); angle = angle + 2*Math.PI / 9; } return finalSize; }
Pourquoi où est mon erreur ?
par avance merci
Partager