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 :

Créer une ParalleleTimeline dans le code behind


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut Créer une ParalleleTimeline dans le code behind
    Bonjour à tous,

    Le but final de mon code est de créer un écran permettant de réorganiser l'emplacement de boutons à l'aide d'un drag and drop. Le code "métier" fonctionne très bien (les boutons se replacent bien comme il faut), cependant l'animation de replacement ne fonctionne pas tout à fait comme je le souhaiterais :
    - Pour un déplacement sur l'axe X -> pas de problème
    - Pour un déplacement sur l'axe Y -> pas de problème
    - Pour un déplacement sur les deux axes, les animations se font l'une après l'autre alors que je souhaiterais qu'elles s’exécutent en parallèle (comme un ParalleleTimeline de XAML).

    Voici la fonction qui fait les changements de positions :
    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
     
    public static void changeOrder(Panel pan, int direction, Point depart)
            {
                if (pan.Children.Count == 0)
                {
     
                    UIElement elt = null;
                    Panel nextPanel;
                    if (direction > 0)
                        nextPanel = (pan.Parent as Panel).Children[(pan.Parent as Panel).Children.IndexOf(pan) + 1] as Panel;
                    else
                        nextPanel = (pan.Parent as Panel).Children[(pan.Parent as Panel).Children.IndexOf(pan) - 1] as Panel;
     
                    elt = nextPanel.Children[0];
     
                    TranslateTransform trans = new TranslateTransform();
                    elt.RenderTransform = trans;
     
                    Point arrivee = elt.TransformToAncestor(Application.Current.Windows[Application.Current.Windows.Count - 1]).Transform(new Point(0, 0));
                    DoubleAnimation x = new DoubleAnimation(depart.X - arrivee.X, TimeSpan.FromSeconds(1));
                    x.FillBehavior = FillBehavior.Stop; 
                    DoubleAnimation y = new DoubleAnimation(depart.Y - arrivee.Y, TimeSpan.FromSeconds(0.5));
                    y.FillBehavior = FillBehavior.Stop; 
     
                    Storyboard.SetTarget(x, elt);
                    Storyboard.SetTargetProperty(x, new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.X)"));
     
                    Storyboard.SetTarget(y, elt);
                    Storyboard.SetTargetProperty(y, new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.Y)"));
     
                    Storyboard sb = new Storyboard();
                    sb.Children.Add(x);
                    sb.Children.Add(y);
                    sb.Completed += delegate
                    {
                        depart = arrivee;
                        nextPanel.Children.Remove(elt);
                        pan.Children.Add(elt);                    
                        changeOrder(nextPanel, direction, depart);
                    };  
     
                    sb.Begin(elt as FrameworkElement);
                }
            }
    Comment donc dire au StoryBoard qu'il doit les exécuter de concert ?

    Merci d'avance.
    Gurdil

  2. #2
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Ok bon, il suffisait de mettre la propriété FillBehavior sur le StoryBoard...

    Enfin bon...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/07/2012, 18h11
  2. [.net]Appeler une fonction située dans le code behind
    Par anto dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 20/05/2009, 13h05
  3. Réponses: 7
    Dernier message: 24/02/2009, 17h00
  4. Réponses: 2
    Dernier message: 17/06/2008, 12h49
  5. Réponses: 6
    Dernier message: 09/01/2007, 14h12

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