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 :

Cacher des éléments en fonction de la taille d'un TextBlock dans un ScrollViewer


Sujet :

Silverlight

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 48
    Points
    48
    Par défaut Cacher des éléments en fonction de la taille d'un TextBlock dans un ScrollViewer
    Bonjour,

    je sens que j'ai un bon problème de noob à vous soumettre

    J'ai un TextBlock contenu dans un ScrollViewer avec les ascenseurs cachés et deux boutons pour faire monter/descendre le texte du TextBlock dans le ScrollViewer. Hyper simple, n'est-ce pas ?

    Dans mon code C#, je modifie le contenu du TextBlock dynamiquement en fonction d'événements reçus puis en fonction de la taille du texte à afficher et de la position courante du scroll vertical, j'affiche ou je cache les boutons de défilement.

    J'utilise la propriété "ScrollableHeight" pour savoir si j'affiche ou pas le bouton pour descendre le texte.

    Mon problème est que cette propriété n'est pas mise à jour avant l'affichage réel du texte et donc sa valeur est erronée lorsque je modifie le contenu du TextBlock puis que je veux changer la visibilité de mes boutons.

    Je cherche donc un moyen d'avoir la bonne valeur de "ScrollableHeight" lorsque je change mon texte dynamiquement.

    Comment dois-je faire ? Dois-je forcer une sorte de "repaint" ou de rafraichissement des propriétés ?

    Merci d'avance pour votre aide.

    @+

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 48
    Points
    48
    Par défaut
    Salut,

    vu le nombre impressionnant de réponses à cette question qui me semblait simple, je vais illustrer le problème avec le code

    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
    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
     
    private void UpBtn_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
          double nextOffset = scrollViewer.VerticalOffset - ScrollDelta;
     
          // Adjust the vertical offset
          scrollViewer.ScrollToVerticalOffset(nextOffset);
     
          RefreshButtonsVisibility(nextOffset);
    }
     
    private void DownBtn_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
          double nextOffset = scrollViewer.VerticalOffset + ScrollDelta;
     
          // Adjust the vertical offset
          scrollViewer.ScrollToVerticalOffset(nextOffset);
     
          RefreshButtonsVisibility(nextOffset);
    }
     
    private void RefreshButtonsVisibility(double offset)
    {
          if (scrollViewer.ViewportHeight >= 0)
          {
               // Hide Down button if bottom reached.
               if (offset >= scrollViewer.ScrollableHeight)
               {
                    DownBtn.Visibility = Visibility.Collapsed;
               }
               else
               {
                    DownBtn.Visibility = Visibility.Visible;
               }
     
               // Hide Up button if top reached.
               if (offset <= 0)
               {
                    UpBtn.Visibility = Visibility.Collapsed;
               }
               else
               {
                    UpBtn.Visibility = Visibility.Visible;
               }
          }
    }
    Le problème est donc que lorsque je passe dans ma fonction "RefreshButtonsVisibility()" la valeur du "scrollViewer.ScrollableHeight" n'est pas encore à jour (elle contient la valeur de l'affichage précédent)...

    Une piste ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 48
    Points
    48
    Par défaut
    Salut,

    j'ai trouvé la solution et je peux confirmer qu'il s'agissait d'un problème de noob :
    il fallait faire un appel à "scrollViewer.UpdateLayout();" au début de ma fonction "RefreshButtonsVisibility()" pour que les valeurs du ScrollViewer soient mises à jour.

    Merci à ceux qui ont éventuellement cherché une solution à mon problème.

    @+

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 18/08/2010, 10h52
  2. Réponses: 5
    Dernier message: 31/03/2010, 13h20
  3. Cacher des éléments dans une zone de liste
    Par toto10 dans le forum IHM
    Réponses: 11
    Dernier message: 19/07/2006, 15h03
  4. Afficher/cacher des éléments de type select en fonction d'autres
    Par GLDavid dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/04/2006, 10h06
  5. pb afficher cacher des éléments
    Par fongus dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 04/04/2006, 13h34

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