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 :

lancer gif une fois [Débutant]


Sujet :

Windows Presentation Foundation

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Points : 139
    Points
    139
    Par défaut lancer gif une fois
    bonjour,

    je voudrais animé un gif dans une image 1 seule fois, et la lancer lorsque je le souhaite,

    j'ai trouvé ce post.

    mais le gif tourne en boucle, je voudrais qu'il ne se lance qu'une fois et qu'il affiche la premiere image du gif le reste du temps.

    voici mon code:

    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
            <Button Content="Button" Height="133" HorizontalAlignment="Left" Margin="35,56,0,0" Name="button9" VerticalAlignment="Top" Width="175" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment" RenderTransformOrigin="0.5,0.5">
            	<Button.RenderTransform>
            		<TransformGroup>
            			<ScaleTransform/>
            			<SkewTransform AngleX="26.339"/>
            			<RotateTransform Angle="-13.913"/>
            			<TranslateTransform X="29.294" Y="-2.497"/>
            		</TransformGroup>
            	</Button.RenderTransform>
                <Button.Template>
                    <ControlTemplate>
                    <Border BorderThickness="2" BorderBrush="Black">
                        <Image my:ImageBehavior.AnimatedSource="C:\Users\Bibi\Pictures\gif-blog-7.gif" >
                        </Image>
                    </Border>
                </ControlTemplate>
                </Button.Template>
            </Button>

    le reste du code c'est le meme que celui du post.

    Merci.

  2. #2
    Membre confirmé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Points : 610
    Points
    610
    Par défaut
    Salut

    Tu peux utiliser un MediaElement en spécifiant le RepeatBehavior

    Un exemple trouvé sur internet

    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
    <MediaElement Name="md" Width="100" Height="100" >
                <MediaElement.Triggers>
                    <EventTrigger RoutedEvent="MediaElement.Loaded">
                        <EventTrigger.Actions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <MediaTimeline Source="C:\Catsleeping.GIF"
                                 Storyboard.TargetName="md"  
                                 RepeatBehavior="1x"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger.Actions>
                    </EventTrigger>
                </MediaElement.Triggers>
            </MediaElement>

    Mais le soucis c'est que ça gère mal les transparents et ça ne marhe pas avec les ressources de ton projet...

    Ou alors créé ta propre classe pour gérer cela, tu dois pouvoir modifier celle dont tu te sers pour ta propriété attachée ou bien lien qui a l'air pas mal !

    Bon courage

  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
    Points : 39 753
    Points
    39 753
    Par défaut
    Salut,

    Tu peux facilement modifier le code du ImageBehavior pour contrôler ça... Il faut ajouter une propriété attachée RepeatBehavior :

    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
            [AttachedPropertyBrowsableForType(typeof(Image))]
            public static RepeatBehavior GetRepeatBehavior(Image obj)
            {
                return (RepeatBehavior)obj.GetValue(RepeatBehaviorProperty);
            }
     
            public static void SetRepeatBehavior(Image obj, RepeatBehavior value)
            {
                obj.SetValue(RepeatBehaviorProperty, value);
            }
     
            public static readonly DependencyProperty RepeatBehaviorProperty =
                DependencyProperty.RegisterAttached(
                  "RepeatBehavior",
                  typeof(RepeatBehavior),
                  typeof(ImageBehavior),
                  new UIPropertyMetadata(RepeatBehavior.Forever));
    Et modifier dans la méthode InitAnimationOrImage la ligne qui définit le RepeatBehavior de l'animation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    animation.RepeatBehavior = GetRepeatBehavior(imageControl);
    Ensuite, au niveau XAML, il suffit de définir la valeur de cette propriété à "1x" :

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    my:ImageBehavior.RepeatBehavior="1x"

    C'est d'ailleurs une fonctionnalité bien utile, je vais l'ajouter dans la lib Dvp.NET

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Points : 139
    Points
    139
    Par défaut
    bonjour,

    ca marche bien, par contre, j'arrive pas a lancer l gif depuis le code behind.

    voici mon code xaml:

    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
            <Button Content="Button" Height="133" HorizontalAlignment="Left" Margin="35,56,0,0" Name="button9" VerticalAlignment="Top" Width="175" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment" RenderTransformOrigin="0.5,0.5" Click="Button_Click">
            	<Button.RenderTransform>
            		<TransformGroup>
            			<ScaleTransform/>
            			<SkewTransform AngleX="26.339"/>
            			<RotateTransform Angle="-13.913"/>
            			<TranslateTransform X="29.294" Y="-2.497"/>
            		</TransformGroup>
            	</Button.RenderTransform>
                <Button.Template>
                    <ControlTemplate>
                    <Border BorderThickness="2" BorderBrush="Black">
                        <Image my:ImageBehavior.AnimatedSource="C:\Users\Bibi\Pictures\gif-blog-7.gif" my:ImageBehavior.RepeatBehavior="2x">
                        </Image>
                    </Border>
                </ControlTemplate>
                </Button.Template>
            </Button>

    et mon code c#:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("bouton bleu");
                button9.SetValue(ImageBehavior.RepeatBehaviorProperty, new RepeatBehavior(1));
            }

    je voudrais que losque je fais un clic sur le bouton, le gif se lance une fois.

    Merci

  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
    Points : 39 753
    Points
    39 753
    Par défaut
    Bah ça va être compliqué, parce ton image n'est pas accessible depuis le code-behind, vu qu'elle est dans un template...

    Sinon, pour relancer l'animation, il faut enlever et remettre l'image dans AnimatedSource. Ce que tu peux faire éventuellement, c'est mettre des triggers sur le bouton : quand le bouton est pressé, tu mets null dans AnimatedSource et l'image dans Source (ce qui donne une image fixe), et quand il est relaché tu remets null dans Source et l'image dans AnimatedSource

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Points : 139
    Points
    139
    Par défaut
    bonjour,

    Citation Envoyé par tomlev Voir le message
    Bah ça va être compliqué, parce ton image n'est pas accessible depuis le code-behind, vu qu'elle est dans un template...
    j'ai fais une propriété attachée, c'est plus facile ?
    il y a une autre solution pour mettre un gif dans un bouton ? (faire le template du bouton sans gif puis lui mettre le gif)

    Citation Envoyé par tomlev Voir le message
    Ce que tu peux faire éventuellement, c'est mettre des triggers sur le bouton : quand le bouton est pressé, tu mets null dans AnimatedSource et l'image dans Source (ce qui donne une image fixe), et quand il est relaché tu remets null dans Source et l'image dans AnimatedSource
    c'est "propre" comme méthode ? (c'est un projet que je souhaite résenté a mes entretiens d'embauche).

    Merci.

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Points : 139
    Points
    139
    Par défaut
    j'ai réussit en fesant:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                button9.SetValue(ImageBehavior.SourceProperty, null);
                button9.SetValue(ImageBehavior.SourceProperty, "C:\\Users\\Bibi\\Pictures\\gif-blog-7.gif");

    c'est la seule solution que j'ai réussit a utiliser.

    Merci.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/05/2009, 14h09
  2. [C#] Application lancer qu'une seule fois.
    Par mr_keyser dans le forum C#
    Réponses: 2
    Dernier message: 31/10/2008, 12h56
  3. Réponses: 8
    Dernier message: 19/09/2008, 12h55
  4. Réponses: 2
    Dernier message: 12/07/2007, 16h53
  5. Lancer un script Javascript une fois un script PHP terminé
    Par kingmandrax dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 15
    Dernier message: 30/09/2006, 17h18

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