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 :

utilisation de DispatcherTimer


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Par défaut utilisation de DispatcherTimer
    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
    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();
    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
    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 )); 
     
                    }
    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
    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;
                        }
    A mon grand désespoir mes images ne se déplacent pas bien qu'aucun message d'erreur ne soit signaé
    Pourquoi où est mon erreur ?

    par avance merci

  2. #2
    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
    Ce n'est pas la bonne façon de procéder...

    - Ca ne sert à rien d'appeler MeasureOverride toi même (sauf pour appeler l'implémentation de base quand tu overrides), car le résultat n'est pas utilisé. Si tu veux recalculer la taille ou la disposition, utilise les méthodes InvalidateMeasure ou InvalidateArrange

    - D'autre part, évite de réinventer la roue : WPF fournit toute une infrastructure très complète pour gérer les animations, autant en tirer parti. Ce sera nettement plus simple qu'avec un Timer. Par contre pour pouvoir animer l'angle, il faut que tu le déclares comme une dependency property. N'oublie pas de spécifier AffectsArrange et/ou AffectsMeasure dans les options des metadata

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public double Angle
    {
        get { return (double)this.GetValue(AngleProperty); }
        set { this.SetValue(AngleProperty, value); }
    }
     
    public static DependencyProperty AngleProperty =
        DependencyProperty.Register(
            "Angle",
            typeof(double),
            typeof(TonControle),
            new FrameworkPropertyMetadata(
                0.0,
                FrameworkPropertyMetadataOptions.AffectsArrange | FrameworkPropertyMetadataOptions.AffectsMeasure));

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Par défaut
    merci pour cette réponse

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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