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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    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 averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    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 : 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
    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 averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    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 : 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
    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 averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    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

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

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