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 :

Animation d'une fenêtre en WPF


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Points : 109
    Points
    109
    Par défaut Animation d'une fenêtre en WPF
    Bonjour,

    Quelqu'un a t-il déjà essayé d'appliquer des animations sympathique à une fenêtre lors de son ouverture ?

    J'imagine que l'on peut commencer par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      CustomWindowDialog customWindowDialog = new CustomWindowDialog();
                DoubleAnimation animFadeIn = new DoubleAnimation();
                animFadeIn.From = 0;
                animFadeIn.To = 1;
                animFadeIn.Duration = new Duration(TimeSpan.FromSeconds(1));
                customWindowDialog.BeginAnimation(Window.OpacityProperty, animFadeIn);
                customWindowDialog.ShowDialog();
    Mais comment faire des choses un plus compliqué, du style jouer sur la taille mais pas en partant du point en haut à gauche mais plutôt du point centrale de la fenêtre. En gros faire un effet de zoom à l'ouverture.

    Merci.

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    L'animation d'une Window, en WPF, c'est pas ce qu'il y a de plus simple. J'ai déjà fait des animations sur l'opacité, parce que c'est ce qu'il y a de plus simple à faire.

    Pour faire ce que tu veux, faut voir si on peut appliquer une transformation à la Window et dans ce cas, tu met le RenderTransformOrigin à 0.5,0.5 et ensuite, tu animes cette transformation.

  3. #3
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Pour faire ce que tu veux, faut voir si on peut appliquer une transformation à la Window et dans ce cas, tu met le RenderTransformOrigin à 0.5,0.5 et ensuite, tu animes cette transformation.
    Je pense pas que ça fonctionne, vu que la fenêtre elle-même (bordure et barre de titre) n'est pas rendue par WPF mais par l'OS, donc a priori une RenderTransform n'aura pas d'effet (ou alors seulement sur le contenu, pas sur la fenêtre elle-même).

    Par contre, un truc un peu bourrin mais qui devrait marcher, c'est d'appliquer une animation sur la taille et la position de la fenêtre

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Par contre, un truc un peu bourrin mais qui devrait marcher, c'est d'appliquer une animation sur la taille et la position de la fenêtre
    Oui mais pour cela, il va falloir jouer avec les APIs Windows

    Un lien sur le sujet: http://social.msdn.microsoft.com/For...5-a90bbb3c7282

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Points : 109
    Points
    109
    Par défaut
    Merci pour vos réponses.

    Globalement, c'est bien ce que je pensait, c'est pas si simple que ça à faire. Pour ce qui est d'appliquer une transformation à ma fenêtre, j'ai pas l'impression que cela soit possible.

    Je vais essayer, dans un premier temps, de jouer avec la taille et la position de ma fenêtre.

    En attendant, je suis toujours preneur d'idées complémentaire sur le sujet.

    Merci.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 025
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 025
    Points : 5 462
    Points
    5 462
    Par défaut
    Bon j'y connais rien en wpf, mais il est sans doute possible de faire des spash screen, qui n'est qu'une image.
    Une solution serait de prendre un screenshot de la page a ouvrir, de la mettre en spash screen et faire une animation dessus. Quanq c'est finis on affiche la fenetre normal.
    Mwéé c'est un peu tordu quand meme!

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2007
    Messages : 120
    Points : 109
    Points
    109
    Par défaut
    Bon c'est juste un début, mais en attendant de trouver mieux, voici une petite fonction qui m'anime ma fenêtre à l'ouverture. Je joue sur la position, la taille et l'opacité. (Pour info, j'applique l'animation contraire lors de la fermeture de ma fenêtre) :

    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
    private static void AnimShowWindow(CustomWindowDialog customWindowDialog)
            {
                Storyboard board = new Storyboard();
     
                DoubleAnimation wAnim = new DoubleAnimation(30, customWindowDialog.Width, new Duration(TimeSpan.FromMilliseconds(450)));
                Storyboard.SetTargetProperty(wAnim, new PropertyPath("(0)", Window.WidthProperty));
                Storyboard.SetTarget(wAnim, customWindowDialog);
     
                DoubleAnimation hAnim = new DoubleAnimation(30, customWindowDialog.Height, new Duration(TimeSpan.FromMilliseconds(450)));
                Storyboard.SetTargetProperty(hAnim, new PropertyPath("(0)", Window.HeightProperty));
                Storyboard.SetTarget(hAnim, customWindowDialog);
     
                DoubleAnimation oAnim = new DoubleAnimation(0.5, 1, new Duration(TimeSpan.FromMilliseconds(1000)));
                Storyboard.SetTargetProperty(oAnim, new PropertyPath("(0)", Window.OpacityProperty));
                Storyboard.SetTarget(oAnim, customWindowDialog);
     
                Rectangle workingArea = Screen.PrimaryScreen.WorkingArea;
                //Position de départ
                customWindowDialog.Top = (workingArea.Height / 2) - (customWindowDialog.Height / 2);
                customWindowDialog.Left = (workingArea.Width / 2) - (customWindowDialog.Width / 2);
     
                double posTop = workingArea.Height / 2;
                double posLeft = workingArea.Width / 2;
     
                DoubleAnimation animTop = new DoubleAnimation(posTop, customWindowDialog.Top, new Duration(TimeSpan.FromMilliseconds(500)));
                Storyboard.SetTargetProperty(animTop, new PropertyPath("(0)", Window.TopProperty));
                Storyboard.SetTarget(animTop, customWindowDialog);
     
                DoubleAnimation animLeft = new DoubleAnimation(posLeft, customWindowDialog.Left, new Duration(TimeSpan.FromMilliseconds(500)));
                Storyboard.SetTargetProperty(animLeft, new PropertyPath("(0)", Window.LeftProperty));
                Storyboard.SetTarget(animLeft, customWindowDialog);
     
                board.Children.Add(wAnim);
                board.Children.Add(hAnim);
                board.Children.Add(animTop);
                board.Children.Add(animLeft);
                board.Children.Add(oAnim);
     
                board.Begin();
     
                customWindowDialog.ShowDialog();
            }
    Merci à tous pour vos réponses.

Discussions similaires

  1. Problème de composant WPF qui passe sous une fenêtre XNA
    Par Tod_sd dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 20/05/2009, 10h46
  2. Une animation dans une fenêtre
    Par sepas dans le forum EDT/SwingWorker
    Réponses: 1
    Dernier message: 07/12/2008, 17h55
  3. tableau dans une fenêtre wpf
    Par modafine dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 01/08/2008, 16h15
  4. Affichage d'une fenêtre WPF à partir d'une app console
    Par pcayrol dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 29/03/2008, 15h56
  5. [WPF] Déplacer une fenêtre sans barre de titre
    Par tomlev dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 12/09/2007, 11h25

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