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

Silverlight Discussion :

Elements coupés à la hache lors d'une animation.


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2007
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 677
    Par défaut Elements coupés à la hache lors d'une animation.
    Bonjour,

    J’ai un petit souci visuel (que je vais tenter d’expliquer -_- ).
    J’ai un contrôle de 500 pixels de haut que j’anime sur l’axe vertical (pour le faire apparaitre à l’écran -en gros il passe d’une position de -500 à 0). Bref rien de sorcier.
    Si je laisse mon navigateur préféré en taille normal d’utilisation, tout va bien, par contre si je redimensionne la fenêtre de façon à ce que la zone de rendu soit plus petite que 500 pixels, mon contrôle se retrouve tronqué à sa base pendant la phase d’animation.
    Je pense que le comportement est logique, le moteur de rendu de Silverlight va prendre pour taille de buffer la taille de la fenêtre du navigateur. Mais lors d’animations de ce genre, on se retrouve avec des contrôles coupés à la serpe et ce n’est pas franchement sexy.
    Du coup, je voulais savoir s’il y avait une solution à ce "souci"... en espérant avoir été clair.

    Si personne ne comprend mon problème, je mettrai en ligne mon application pour que vous voyiez de vos yeux le phénomène.

  2. #2
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Il suffit de placer ton élement à animer sans margin en le déplaçant préalablement via un translatetransform comme ça :

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Button Content="Hello">
      <Button.RenderTransform>
            <TranslateTransform X="-500" />
      </Button.RenderTransform>
    </Button>

    ainsi ton élément ne sera pas clippé.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2007
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 677
    Par défaut
    Je ne suis pas sûr de comprendre ce que tu entends par "sans margin".

    Dans le code ci-dessous, je n'ai pas de margin sur mon "host" (c'est lui qui est animé, donc), mais mon SubscriptionUI en possède (et je suis bien obligé).

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <Grid
        Name="_hostSubscriptionUI"
        VerticalAlignment="Top">
     
        <Grid.RenderTransform>
            <TranslateTransform Y="-500"/>
        </Grid.RenderTransform>
     
        <src:SubscriptionUI x:Name="_subscriptionUI"/>
     
        <Grid.Resources>
            <Storyboard 
                x:Name="_subscriptionUIStoryboardIn">
     
                <DoubleAnimation 
                    Duration="00:00:1.0" 
                    Storyboard.TargetName="_hostSubscriptionUI" 
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.Y)" 
                    To="0">
     
                    <DoubleAnimation.EasingFunction>
                        <QuinticEase EasingMode="EaseOut" />
                    </DoubleAnimation.EasingFunction>
                </DoubleAnimation>
            </Storyboard>
     
            <Storyboard 
                x:Name="_subscriptionUIStoryboardOut">
     
                <DoubleAnimation 
                    Duration="00:00:0.5" 
                    Storyboard.TargetName="_hostSubscriptionUI" 
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.Y)" 
                    To="-500">
     
                    <DoubleAnimation.EasingFunction>
                        <PowerEase EasingMode="EaseOut" />
                    </DoubleAnimation.EasingFunction>
                </DoubleAnimation>
            </Storyboard>
        </Grid.Resources>
    </Grid>

  4. #4
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Excuse moi à la fois du retard et de ma réponse qui était fausse
    En fait c'est le contraire qu'il faut faire (je confonds toujours les deux).

    Comme tu l'a bien compris, ton problème vient du fait que ton animation commence en dehors de l'écran et que les les transformations n'agissent que sur des images (copie de l'ecran).

    Pour ne pas avoir cette effets de coupe il faut forcer le XAML a se dessiner en dehors du cadre. Pour se faire tu peux utiliser un Margin négatif (ici -500 sur le top).

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <Grid
        Name="_hostSubscriptionUI"
        VerticalAlignment="Top" Margin="0,-500,0,0">
     
        <Grid.RenderTransform>
            <TranslateTransform Y="0"/>
        </Grid.RenderTransform>
     
        <src:SubscriptionUI x:Name="_subscriptionUI"/>
     
        <Grid.Resources>
            <Storyboard 
                x:Name="_subscriptionUIStoryboardIn">
     
                <DoubleAnimation 
                    Duration="00:00:1.0" 
                    Storyboard.TargetName="_hostSubscriptionUI" 
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.Y)" 
                    To="500">
     
                    <DoubleAnimation.EasingFunction>
                        <QuinticEase EasingMode="EaseOut" />
                    </DoubleAnimation.EasingFunction>
                </DoubleAnimation>
            </Storyboard>
     
            <Storyboard 
                x:Name="_subscriptionUIStoryboardOut">
     
                <DoubleAnimation 
                    Duration="00:00:0.5" 
                    Storyboard.TargetName="_hostSubscriptionUI" 
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.Y)" 
                    To="0">
     
                    <DoubleAnimation.EasingFunction>
                        <PowerEase EasingMode="EaseOut" />
                    </DoubleAnimation.EasingFunction>
                </DoubleAnimation>
            </Storyboard>
        </Grid.Resources>
    </Grid>

    Dans le code on voit aussi que j'ai modifié les valeurs de tes animations puisque le Margin début à -500, l'animation doit débuter à 0 (et plus - 500). En gros on rajoute +500 a toutes les valeurs de l'animations.

    J'ai pas testé mais ça doit marcher

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2007
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 677
    Par défaut
    Merci, c'est pas bête, je testerai ça ce soir !
    ^^

    Dans le pire des cas, si ça ne marche pas, j'ai rusé en modifiant le MaxHeight du conteneur parent et ça résout le souci (mais c'est peut être moins propre).

Discussions similaires

  1. Problème d'axes lors d'une animation
    Par Eztarok dans le forum MATLAB
    Réponses: 2
    Dernier message: 23/05/2011, 13h13
  2. Lenteur lors d'une animation
    Par zakmakaay dans le forum MATLAB
    Réponses: 10
    Dernier message: 11/01/2010, 19h50
  3. probleme lors d'une création d'animation par le code
    Par Finality dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 13/10/2008, 21h12
  4. Tableau coupé lors d'une impression
    Par Rodrick dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/07/2007, 11h44
  5. bordure lors d'un survole d'une animation flash
    Par andrianimehy dans le forum Flash
    Réponses: 5
    Dernier message: 31/05/2007, 18h33

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