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 :

[WPF] créer "path" perso


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 17
    Points
    17
    Par défaut [WPF] créer "path" perso
    bonjour,

    je voudrais savoir s'il est possible, a la maniere des userControls, de créer un objet personnalisé s'inspirant de Path (vu je ne peux pas en hériter), et comportant une animation, de sorte qu'il puisse être réutilisé en changeant uniquement les "data"?

    en fait j'ai une 20aine de formes a dessiner, ces formes représentent un flux de données. Elles ne bougeront pas en elles meme, mais pour visualiser une activité sur le flux, je voudrais pouvoir jouer une animation (une bille qui se balade sur la forme). Tout ca en évitant de me retapper 20fois la création de l'anim.

    est ce que ca parrait possible ? ou est-ce trop ambitieux ?

    merci d'avances pour vos conseils

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    quelqu'un pourrait me mettre sur une piste ?

    J'ai essayé ca:

    Code C# : 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
     
    public sealed class CustomAnimatedPath : Shape
        {
            #region Dependency Properties
     
            public static readonly DependencyProperty DataProperty = DependencyProperty.Register("Data", typeof(Geometry), typeof(GeometryConverter), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));
     
            #endregion
     
            #region CLR Properties
     
            [TypeConverter(typeof(GeometryConverter))]
            public Geometry Data
            {
                get { return (Geometry)base.GetValue(DataProperty); }
                set { base.SetValue(DataProperty, value); }
            }
            #endregion
     
            #region Overrides
            protected override Geometry DefiningGeometry
            { get { return Data; } }
            #endregion
        }

    voila le code XAML utilisé pour instancier l'objet
    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <shapes:CustomAnimatedPath Data="M0,0 L 100,100Z"/>

    au lancement j'ai une exception qui me dit que l'objet n'a pas pu être instancié

    mercio d'avance

  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 Zenith Voir le message
    au lancement j'ai une exception qui me dit que l'objet n'a pas pu être instancié
    A mon avis c'est même le type qui ne peut pas être initialisé, parce que la définition de ta dependency property est foireuse.

    1. le 3e paramètre doit être le type qui définit la DependencyProperty, en l'occurence CustomAnimatedPath
    2. 0.0 ça me parait pas vraiment correct comme valeur par défaut pour un objet Geometry ... essaie plutôt avec null

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    effectivement: ca passe mieux. ah les joies du copier collé !

    Merci de ton aide !

    Bon maintenant que tout ca s'instancie, nouveau probleme: rien ne s'affiche. j'imagine qu'il faut que je dise a l'objet de s'afficher. mais comment ?!?

    je suis novice en WPF, et j'avoue que cette techno me pose "quelques" problemes

  5. #5
    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 Zenith Voir le message
    effectivement: ca passe mieux. ah les joies du copier collé !
    Ben pour une DP y a pas besoin de faire du copier-coller, y a un snippet pour ça. Tu tapes "propdp" et TAB, et il te génère tout ce qu'il faut

    Citation Envoyé par Zenith Voir le message
    Bon maintenant que tout ca s'instancie, nouveau probleme: rien ne s'affiche. j'imagine qu'il faut que je dise a l'objet de s'afficher. mais comment ?!?
    Ben en fait si tu regardes la classe Path avec Reflector, y a pas grand chose de plus par rapport à la classe de base Shape :
    - une DP "Data", comme tu as fait
    - un override de la propriété DefiningGeometry, qui renvoie Data. D'ailleurs tu ne sembles pas avoir défini cette propriété, donc c'est bizarre que ça compile vu qu'elle est abstraite dans Shape... Tu peux l'implémenter comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected override Geometry DefiningGeometry
    {
        get
        {
            return this.Data ?? Geometry.Empty;
        }
    }
    Y a aussi un override de EffectiveValuesInitialSize, mais c'est une propriété internal, donc tu peux pas y accéder... je sais pas trop à quoi ça sert


    Par contre je ne comprends pas trop à quoi sert ta classe par rapport à la classe Path existante... Path.Data est une DP, donc tu peux déjà l'animer, non ?

    Sinon regarde la classe PathFigure, qui hérite de Animatable, ça permet peut-être de faire ce que tu veux

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par tomlev
    Ben pour une DP y a pas besoin de faire du copier-coller, y a un snippet pour ça. Tu tapes "propdp" et TAB, et il te génère tout ce qu'il faut
    merci du tip !

    Citation Envoyé par tomlev
    - un override de la propriété DefiningGeometry, qui renvoie Data. D'ailleurs tu ne sembles pas avoir défini cette propriété, donc c'est bizarre que ça compile vu qu'elle est abstraite dans Shape... Tu peux l'implémenter comme ça :
    si, je l'ais défini, t'as du la louper dans le code

    Citation Envoyé par tomlev
    Par contre je ne comprends pas trop à quoi sert ta classe par rapport à la classe Path existante...
    Pour le moment: a rien, je découvre sur le tas donc je fais les choses par étape

    Citation Envoyé par tomlev
    Path.Data est une DP, donc tu peux déjà l'animer, non ?
    En fait ce n'est pas le Path que je veux animer en lui même, mais je veux animer une boule dessus: en faite un mothion path en gros, mais sous forme d'objet réutilisable (vu que j'ai une floppée de cet objet a visualiser, j'veux pas refaire une anim/Path)

    Citation Envoyé par tomlev
    Sinon regarde la classe PathFigure, qui hérite de Animatable, ça permet peut-être de faire ce que tu veux
    je vais regarder ca, merci !
    EDIT: j'ai regardé et j'ai cru comprendre que PathFigure ne permet de tracer que des segments, mais il faut que j'ai la possibilité d'utiliser des courbes aussi. donc ca ne me convient pas.


    Je n'ai toujours pas réussi à l'afficher

  7. #7
    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 Zenith Voir le message
    si, je l'ais défini, t'as du la louper dans le code
    hum... j'ai rien dit

    Citation Envoyé par Zenith Voir le message
    En fait ce n'est pas le Path que je veux animer en lui même, mais je veux animer une boule dessus: en faite un mothion path en gros, mais sous forme d'objet réutilisable (vu que j'ai une floppée de cet objet a visualiser, j'veux pas refaire une anim/Path)
    Je crois que c'est la classe DoubleAnimationUsingPath qui permet de faire ce que tu veux. Y a un exemple dans la doc

    Sinon, je pense que si rien ne s'affiche avec ta classe c'est parce que tu n'as pas défini les propriétés Stroke et Fill, donc ta forme est là mais elle est transparente...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    merci beaucoup pour toutes ces pistes ! je vais regarder ca de suite !

    juste une autre question: si je continues sur le code que j'ai posté plus haut (ou avec doubleAnimationUsingPath), sera-t-il possible d'intégrer l'animation a mon objet, et de la déclencher/arreter/remettre a zero par simple appel a des methodes ?

  9. #9
    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 Zenith Voir le message
    juste une autre question: si je continues sur le code que j'ai posté plus haut (ou avec doubleAnimationUsingPath), sera-t-il possible d'intégrer l'animation a mon objet, et de la déclencher/arreter/remettre a zero par simple appel a des methodes ?
    ben l'animation n'est pas supposée faire partie de ton objet... regarde l'exemple que je t'ai indiqué, ce sera plus clair

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    rha ! c'est justement ca que je voulais éviter :s

    Code XAML : 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
     
    <BeginStoryboard>
                <Storyboard RepeatBehavior="Forever">
     
                  <!-- Animates the rectangle horizotally along the path. -->
                  <DoubleAnimationUsingPath
                    Storyboard.TargetName="AnimatedTranslateTransform"
                    Storyboard.TargetProperty="X"
                    PathGeometry="{StaticResource AnimationPath}"
                    Source="X" 
                    Duration="0:0:5"  />
     
                  <!-- Animates the rectangle vertically along the path. -->
                  <DoubleAnimationUsingPath
                    Storyboard.TargetName="AnimatedTranslateTransform"
                    Storyboard.TargetProperty="Y"
                    PathGeometry="{StaticResource AnimationPath}"
                    Source="Y" 
                    Duration="0:0:5"  />
                </Storyboard>
              </BeginStoryboard>


    j'ai bien essayé ca:
    Code C# : 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
    public class LienGR : Canvas
        {
            private PathFigureCollection Data;
            private PathGeometry cheminAnim;
     
            public LienGR(string donnees, Window parent) : base()
            {
                PathFigureCollectionConverter pfc = new PathFigureCollectionConverter();
                if(!pfc.CanConvertFrom(typeof(string)))
                { throw new Exception("Ne peut pas convertir le type ! \n"); }
     
                try
                {
                    Data = (PathFigureCollection)pfc.ConvertFromString(donnees);
                    NameScope.SetNameScope(parent, new NameScope());
     
                    MatrixTransform mtf = new MatrixTransform();
                    Ellipse boule = new Ellipse();
                    boule.Width = 12;
                    boule.Height = 12;
                    boule.Stroke = Brushes.Black;
                    boule.Visibility = Visibility.Visible;
                    boule.RenderTransform = mtf;
                    parent.RegisterName("MTF", mtf);
                    this.Children.Add(boule);
     
                    cheminAnim = new PathGeometry();
                    cheminAnim.Figures = Data;
     
                    // on met en place les données de l'anim
                    MatrixAnimationUsingPath matrixAnimation = new MatrixAnimationUsingPath();
                    matrixAnimation.PathGeometry = cheminAnim;
                    matrixAnimation.Duration = TimeSpan.FromSeconds(0.5);
                    matrixAnimation.RepeatBehavior = RepeatBehavior.Forever;
     
                    // Set the animation to target the Matrix property
                    // of the MatrixTransform named "mtf".
                    Storyboard.SetTargetName(matrixAnimation, "MTF");
                    Storyboard.SetTargetProperty(matrixAnimation, new PropertyPath(MatrixTransform.MatrixProperty));
     
                    // Create a Storyboard to contain and apply the animation.
                    Storyboard pathAnimationStoryboard = new Storyboard();
                    pathAnimationStoryboard.Children.Add(matrixAnimation);
                    pathAnimationStoryboard.Begin();
                }
                catch (Exception e) { Console.WriteLine("\n\n\n" + e.Message + "\n\n" + e.Source + "\n\n\n"); }
            }
        }

    mais rien n'y fait, j'ai une exception (qui vient de la ligne pathAnimationStoryboard.Begin(); )
    l'affichage console donne:
    Aucune portée de nom applicable n'existe pour résoudre le nom 'MTF'.

    PresentationFramework
    ca m'embete quand même pas mal de devoir tout me tapper ca pour chaque anim

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    personne n'aurait de piste ? quitte a me faire changer d'idée (vu que rien ne marche la de toutes facon )

    je ne peux pas croire que jamais personne n'ait eu a visualiser un flux en WPF

    ca me prend la tête ce truc c'est affolant !

  12. #12
    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
    Ben tu mets tout dans les ressources (ou au moins le storyboard), ça doit pouvoir le faire, non ?

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    le probleme, c'est que j'ai 132 flux a visualiser, donc j'aurais aimé éviter de me tapper les 132 anims a la main

    est ce que ca parrait possible d'intégrer l'anim a un objet qui hérite d'un conteneur ? pourquoi est ce que dans mon code il refuse de m'intégrer l'animation ? a quoi correspond l'exception "Aucune portée de nom applicable n'existe pour résoudre le nom 'MTF'." ? aurais-tu la réponse à l'une de ces questions ?

    merci encore

  14. #14
    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 Zenith Voir le message
    est ce que ca parrait possible d'intégrer l'anim a un objet qui hérite d'un conteneur ?
    Tu pourrais pas tout simplement faire un UserControl que tu réutilises pour chaque flux ?

    Citation Envoyé par Zenith Voir le message
    pourquoi est ce que dans mon code il refuse de m'intégrer l'animation ? a quoi correspond l'exception "Aucune portée de nom applicable n'existe pour résoudre le nom 'MTF'." ?
    Je sais pas trop, dans ton code tu fais des trucs que j'ai jamais vus
    (les manips sur les NameScope etc...)

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Tu pourrais pas tout simplement faire un UserControl que tu réutilises pour chaque flux ?
    J'y ai pensé, mais Path n'est pas un composant (Control), donc si je dois faire ca, de quel composant partir ?

    pour namescope et compagnie, je sais pas plus que toi, c'est un copié coller . j'te dis je débute (sévere) en WPF, donc la je nage un peu j'avoue

  16. #16
    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 Zenith Voir le message
    J'y ai pensé, mais Path n'est pas un composant (Control), donc si je dois faire ca, de quel composant partir ?
    non, ce que je veux dire c'est que tu peux englober le path, l'animation etc dans un UserControl

  17. #17
    Membre habitué Avatar de Thrud
    Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Points : 183
    Points
    183
    Par défaut
    Bonjour,

    concernant ton problème de
    Aucune portée de nom applicable n'existe pour résoudre le nom 'MTF'.

    PresentationFramework
    J'ai pas fait énormément d'animations non plus, mais je vois une différence entre ton bout de code et celui de mon application.
    Dans mon code, avant de faire les Storyboard.SetTargetName(), j'ai un parent.RegisterName(...) qui est fait. Tu devrais essayer un appel comme ça sur ton nom "MTF". D'autant que je vois que tu as un 'RegisterName()' tout seul en commentaire.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    salut!

    En fait j'avais posté le code juste avant de décommenter la ligne register, qui est en fait parent.RegisterName("MTF", mtf);
    j'édite ca de suite, merci de m'avoir fait la remarque !

    malgré cette modif, j'ai la meme exception. pourrais tu stp me montrer ton code pour les animations ?

    pour ce qui est d'intégrer mon anim a un UserControl, si je dois tout englober dedans, sans pour autant hériter d'un controle existant, n'est ce pas une classe "normale" plustot qu'un UserControl qu'il faut que j'utilise ?


    merci

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    bon, c'est pas tres propre, mais j'avance:

    Code C# : 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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    public sealed class CustomAnimatedPath : Shape
     
        {
            #region Dependency Properties
            public static readonly DependencyProperty DataProperty = DependencyProperty.Register("Data", typeof(Geometry), typeof(CustomAnimatedPath), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));
            #endregion
     
            #region CLR Properties
            [TypeConverter(typeof(GeometryConverter))]
            public Geometry Data
            {
                get { return (Geometry)base.GetValue(DataProperty); }
                set { base.SetValue(DataProperty, value); }
            }
            #endregion
     
            #region Overrides
            protected override Geometry DefiningGeometry
            { get { return this.Data ?? Geometry.Empty; } }
            #endregion
     
     
            private Ellipse ellipse = new Ellipse();
            private PathGeometry chemin=null;
            private MatrixTransform ellipseMatrixTransform_LtR = new MatrixTransform();
            private MatrixAnimationUsingPath ellipseMatrixAnimation_LtR = new MatrixAnimationUsingPath();
     
            private Storyboard pathAnimationStoryboard_LtR = new Storyboard();
            private static bool _isStartedLeftToRight = false;
            public void StartLeftToRight()
            {
                if (!_isStartedLeftToRight)
                {
     
                    NameScope.SetNameScope(getFenetreMere(), new NameScope());
                    ellipse.Stroke = Brushes.Black;
                    ellipse.Fill = Brushes.AliceBlue;
                    ellipse.StrokeThickness = 1;
                    ellipse.Width = 10;
                    ellipse.Height = 10;
                    ellipse.Visibility = Visibility.Visible;
                    ellipse.RenderTransform = ellipseMatrixTransform_LtR;
                    if (!(getCanvasPere().Children.Contains(ellipse)))
                        getCanvasPere().Children.Add(ellipse);
     
                    // enregistre
                    string nom = "ellipse_" + base.Name + "_MatrixTransform_LtR";
                    if (nom == null)
                        nom = "ellipse_" + base.Name + "_MatrixTransform_LtR";
                    if (getFenetreMere().FindName(nom) == null)
                        getFenetreMere().RegisterName(nom, ellipseMatrixTransform_LtR);
     
                    if (chemin == null)
                        chemin = PathGeometry.CreateFromGeometry(Data);
     
                    // empeche la modification du chemin
                    chemin.Freeze();
     
                    // definit les caraceristiques de l'aimation
                    ellipseMatrixAnimation_LtR.PathGeometry = chemin;
                    ellipseMatrixAnimation_LtR.Duration = TimeSpan.FromSeconds(0.5);
                    ellipseMatrixAnimation_LtR.RepeatBehavior = RepeatBehavior.Forever;
     
                    // impose l animation a l ellipse
                    Storyboard.SetTargetName(ellipseMatrixAnimation_LtR, nom);
                    Storyboard.SetTargetProperty(ellipseMatrixAnimation_LtR, new PropertyPath(MatrixTransform.MatrixProperty));
     
                    // cree la Storyboard pour contenier et appliquer l animation
                    pathAnimationStoryboard_LtR.Children.Clear();
                    pathAnimationStoryboard_LtR.Children.Add(ellipseMatrixAnimation_LtR);
     
                    //commence l animation
                    pathAnimationStoryboard_LtR.Begin(getFenetreMere(), true);
     
                }
            }
     
            private Canvas getCanvasPere()
            {
                return (Canvas)(VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(this)));
            }
     
            private Window getFenetreMere()
            {
                return (Window)VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(this)))))));
            }
     
        }

    par contre l'anim me fait un aller-retour, faudrait que j'arrive a la bloquer a un aller simple ou a un "retour" simple. j'vais encore fouiller, et j'vous dit ca. mais si vous savez faire, me laissez pas galérer

    merci encore !!

  20. #20
    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 Zenith Voir le message
    par contre l'anim me fait un aller-retour, faudrait que j'arrive a la bloquer a un aller simple ou a un "retour" simple. j'vais encore fouiller, et j'vous dit ca. mais si vous savez faire, me laissez pas galérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ellipseMatrixAnimation_RtL.AutoReverse = false;
    Mais normalement c'est la valeur par défaut

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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