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 Phone .NET Discussion :

Scroll to bottom animé.


Sujet :

Windows Phone .NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut Scroll to bottom animé.
    Bonjour,

    Je cherche à pouvoir effectuer un scroll automatique sur un scrollviewer, le tout dans animé.

    Par exemple, mon scrollviewer contient une liste d'objets et je me trouve quelque par au milieu de celui-ci. Lorsqu'un objet est ajouté à la liste, j'aimerais que le scrollviewer scroll jusqu'en bas, en X secondes de façon smoothie.

    Savez-vous comment faire?

    Merci d'avance.

  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
    vu que les propriétés VerticalOffset et HorizontalOffset de ScrollViewer dans un Storyboard sont en lecture seules, tu ne peux pas les utiliser dans un Storyboard. En revanche tu dois pouvoir créer 2 propriétés attachés (snippet propa) Par exemple VOffset et HOffset qui te permetteront de lancer les méthodes ScrollToVerticalOffset et ScrollToHorizontalOffset. Ces 2 propriétés seront accessibles de ton Storyboard.

    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
     
    public static double GetHOffset(DependencyObject obj)
            {
                return (double)obj.GetValue(HOffsetProperty);
            }
     
            public static void SetHOffset(DependencyObject obj, double value)
            {
                obj.SetValue(HOffsetProperty, value);
            }
     
            // Using a DependencyProperty as the backing store for HOffset.  This enables animation, styling, binding, etc...
            public static readonly DependencyProperty HOffsetProperty =
                DependencyProperty.RegisterAttached("HOffset", typeof(double), typeof(ScrollViewerBehaviour), new PropertyMetadata(0.0, OnHOffsetChanged ));
     
            private static void OnHOffsetChanged( DependencyObject sender, DependencyPropertyChangedEventArgs e )
            {
                ScrollViewer s = sender as ScrollViewer;
     
                if( s != null )
                    s.ScrollToHorizontalOffset((double)e.NewValue);
            }

    coté XAML ça fait un truc du genre :

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <UserControl
        x:Class="SilverlightTest.MainPage"
        xmlns:local="clr-namespace:SilverlightTest"
      <Grid x:Name="LayoutRoot">
     
            <ScrollViewer  local:ScrollViewerBehaviour.HOffset="12.0"></Scrollviewer>
     
      </Grid>
    </UserControl>

    Si tu veux plus d'exemple de propriété attachée tu peux jeter un coup d'oeil ici : http://blog.naviso.fr/wordpress/?p=12

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    J'ai bien crée le behavior qui fonctionne parfaitement dans le designer. Par contre je ne sais pas comment y accéder dans le code behind ni dans Blend, et donc faire une animation en conséquence.

    Que mettre dans le target property?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Storyboard.TargetProperty="???"

  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
    local:ScrollViewerBehaviour.HOffset normalement

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut
    Helas il ne veut rien savoir :/

    Cannot resolve TargetProperty local:ScrollViewerBehaviour.HOffset on specified object.

  6. #6
    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
    tu as déclaré ton local ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut
    Oui dans le xaml.

  8. #8
    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
    Bizarre.
    Le Behavior Fonctionne t'il sans Storyboard cad juste en lui fixant une valeur ?

    Tu peux me montrer ton code Xaml (juste le storyboard et le ScrollViewer) ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut
    Le behavior fonctionne bien quand je lui fixe une valeur directement dans le xaml. Mais je n'arrive pas a y accéder depuis le code behind, l'auto-complétion ne me propose rien.

    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
    <phone:PhoneApplicationPage
    	x:Class="MonEntreprise.MaSolution.WP7.MainPage"
    	xmlns:local="clr-namespace:MonEntreprise.MaSolution.WP7.Behaviors"
    	DataContext="{Binding Main, Source={StaticResource Locator}}">
     
    	<phone:PhoneApplicationPage.Resources>
    		<Storyboard x:Name="scrollBottom">
    			<DoubleAnimation Duration="10"
                                 To="100"
                                 Storyboard.TargetProperty="local:ScrollViewerBehaviour.VOffset"
                                 Storyboard.TargetName="scroller"
                                 />
    		</Storyboard>
    	</phone:PhoneApplicationPage.Resources>
     
    <!-- code divers -->
     
                <ScrollViewer Name="scroller" 
    		          local:ScrollViewerBehaviour.VOffset="10.0" >
                    <StackPanel>
                        <item />
                        <item />
                        <item />
                        <item />
                    </StackPanel>
                </ScrollViewer>

  10. #10
    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
    Après quelques tests, effectivement cela ne passe pas.*
    Je pense que c'est une spécificité de WP7 car cela doit passer sous SL

    Il y a d'autre façon de faire mais avant toute chose j'ai un petit soucis pour faire fonctionner ScrollToVerticalOffset. J'utilise le nouvel emulateur fournit avec le SDK Beta Mango. quelle version du SDK as-tu ? La méthode ScrollToVerticalOffset fonctionne t'elle chez toi ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut
    J'ai aussi la beta, mais là c'est un projet NoDo. Le ScrollToVerticalOffset() est de toute façon bien accessible. Je l'utilise justement sans animation en attendant.

  12. #12
    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
    Sorry je dois avoir un jeton sur mon emulateur et celui ci refuse de scroller. Mais si cela marche pour toi, tant mieux.

    Logiquement tu dois pouvoir affecter la TargetProperty de ton animation via du CodeBehind :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                DoubleAnimation animation = this.ScrollBottom.Children[0] as DoubleAnimation;
                // Fixe le VOffsetProperty comme target de ton DoubleAnimation
                Storyboard.SetTargetProperty(animation, new PropertyPath(ScrollBehavior.VOffsetProperty));
                this.ScrollBottom.Begin();

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut
    Ça marche parfaitement, merci beaucoup pour ton aide

    Donc pour résumer, en partant du principe que le behavior ScrollViewerBehaviour ai bien été implémenté (cf premier post de Samuel Blanchard).

    Voici d'abord le 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
    19
    20
    21
    22
    23
    24
    <phone:PhoneApplicationPage
    	x:Class="MonEntreprise.MaSolution.WP7.MainPage"
    	xmlns:local="clr-namespace:MonEntreprise.MaSolution.WP7.Behaviors"
    	DataContext="{Binding Main, Source={StaticResource Locator}}">
     
    	<phone:PhoneApplicationPage.Resources>
    		<Storyboard x:Name="scrollBottom">
    			<DoubleAnimation Duration="0:0:1"
                                 Storyboard.TargetName="scroller"
                                 />
    		</Storyboard>
    	</phone:PhoneApplicationPage.Resources>
     
    <!-- code divers -->
     
                <ScrollViewer Name="scroller" 
    		          local:ScrollViewerBehaviour.VOffset="10.0" >
                    <StackPanel>
                        <item />
                        <item />
                        <item />
                        <item />
                    </StackPanel>
                </ScrollViewer>

    Et niveau code behind :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    DoubleAnimation animation = scrollBottom.Children[0] as DoubleAnimation;
     
    Storyboard.SetTargetProperty(animation, new PropertyPath(ScrollViewerBehaviour.VOffsetProperty));
     
    animation.From = scroller.VerticalOffset;
    animation.To = scroller.ScrollableHeight;
     
    scrollBottom.Begin();

    Merci encore pour ton aide

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

Discussions similaires

  1. Animations au scroll
    Par poussinvert dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/12/2013, 15h13
  2. Réponses: 7
    Dernier message: 03/09/2013, 09h56
  3. Effets d'animation au scrolling
    Par quentin74 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/01/2012, 18h01
  4. Scroll dans les animations Flash
    Par kericoul dans le forum Flash
    Réponses: 1
    Dernier message: 26/06/2007, 17h26
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

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