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 :

scrollviewer et RowDefinition = "Auto"


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut scrollviewer et RowDefinition = "Auto"
    Bonjour,

    J'ai une Grille composée de trois lignes.

    La première est de hauteur constante 50 Pixels. Elle contient un combo "Secteur".
    La deuxième est de hauteur variable. Elle contient un dataGrid "Clients".
    La troisième est également de hauteur variable et contient un autre datagrid "Contrats".

    Vous aurez déjà compris qu'après avoir sélectionné un secteur dans le combo, il me ramène en deuxième ligne les clients de ce secteur et en troisième ligne les contrats du client actuellement sélectionné.

    Je voudrais pouvoir optimiser la place pour utiliser tout l'espace disponible de mon browser.

    Malheureusement, en fonction du secteur, j'ai parfois un seul client et parfois 15. De même, en fonction du client sélectionné, j'ai parfois un contrat, parfois 20...

    Donc la hauteur de mon deuxième et troisième row doit être variable.

    Si je fais:

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <Grid.RowDefinitions>
        	<RowDefinition Height="50" />
        	<RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
     
            </Grid.RowDefinitions>

    J'ai une même hauteur pour ma deuxième et troisième ligne de ma grille. Ce qui est un peu bête puisque j'ai par exemple un seul client, un gros blanc, et puis en troisième ligne, 15 contrats, qui comme ils ne savent pas tous s'afficher, font que j'ai une scrollbarre verticale qui s'affiche.

    Pas top.

    Si je fais:

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Grid.RowDefinitions>
        	<RowDefinition Height="50" />
        	<RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>

    C'est beaucoup mieux car si je n'ai qu'un client en ligne 2, il me l'affiche, et sans perdre de place, il affiche alors mes 15 contrats dans ma ligne 3 qui est beaucoup plus haute.

    Le problème, c'est qu'avec la définition "Auto", mon scrollViewer ne s'affiche jamais. Donc si j'ai plus de 15 contrats, je ne sais pas accéder au 16 ème.

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Et avec quelque chose comme :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            <Grid.RowDefinitions>
                <RowDefinition Height="50" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Oui, j'avais essayé,

    l'effet est alors que du coté "Auto" (deuxième row de la Grid) il n'y a pas de scrollViewer, coté du "*" c'est OK.

    En fait, en y réfléchissant, c'est un peu normal, d'un coté en mettant "Auto", on dit au container "Grandit tant que ton contenu grandit" de l'autre, en mettant un scrollViewer, on dit au contenu "Quand ta taille dépasse celle de ton container, affiche les scrollViewer". Celà n'arrive jamais...

    Il faudrait en fait pouvoir Binder le maxHeight du container sur la hauteur du row de la Grid.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 82
    Par défaut
    Bonjour,
    le scrollViewer il est dans une des 3 lignes ?

    Car sauf erreur il devrait etre le parent du Grid pour pouvoir scroller quand celui-ci (car c'est bien le grid qui devient plus grand que l'ecran) grandit.
    Un stackpanel serait suffisant pour les 3 lignes (1 par ligne), le tout dans un Grid, avec rowDefinition sur auto, et le Grid dans un ScrollViewer

  5. #5
    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
    D'accord avec Vinchenzo.939, Il suffit d'imbriquer ton ScrollViewer pour que cela fonctionne. Dans ton ScrollViewer, un ItemsControl te permettra de faire du Binding facilement.

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Grid>
     
     <Grid.RowDefinitions>
       <RowDefinition Height="50"/>
       <RowDefinition Height="Auto"/>
       <RowDefinition Height="*"/>
     </Grid.RowDefinitions>
     
       <ScrollViewer Grid.Row="2">
          <ItemsControls ItemsSource="{Binding MesTrucs}" />
      </ScrollViewer>
    </Grid>

    EDIT : Je me demande si j'ai bien compris le probleme

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Citation Envoyé par Samuel Blanchard Voir le message
    EDIT : Je me demande si j'ai bien compris le probleme
    Ben oui, moi je comprends le problème, par contre, je ne comprend pas la proposition de Vinchenzo.

    Mettre un ScrollViewer autour des trois Rows de ma grille n'a pas d'intérêt pour moi, et en plus, je pense qu'il ne s'affichera jamais puisqu'un des Row de ma grille est mis sur Auto et que donc ma grille va s'agrandir sans cesse sans qu'une hauteur max vienne dire au ScrollViewer de se déclencher.

    Ce qu'il me faut, et qui fonctionne avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <RowDefinition Height="*"/>
    c'est un scrollbar vertical et horizontal qui apparaisse sur mon datagrid quand la taille dépasse la place disponible. Je n'ai même pas besoin de les définir, c'est prévu "de base" avec le datagrid.

+ 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