2010-09-20 15 views
1

J'ai une grille de 5 lignes. Aux lignes 2 et 4, j'ai un DataGrid. Les autres lignes ont une hauteur fixe. Le contenu des tables dans les DataGrids est bien sûr déterminé dynamiquement, et donc leur hauteur aussi. Comme dans mon application particulière, il existe une relation entre la hauteur des deux tables, je veux ajuster le MaxHeight des deux à l'exécution. Si une table est plus longue que la MaxHeight initialement speficied, elle est supposée obtenir un ScrollBar. Mais la hauteur des deux tables ne devrait jamais être plus longue que la page du navigateur.Silverlight ajuster la hauteur DataGrid au moment de l'exécution

Maintenant, j'essayé de le faire lors de l'exécution déclenchée à un événement:

 if (availableSpace - heightOfTable1 - heightOfTable2 < 0) 
     { 
      if (heightOfTable1 > heightOfTable2) 
      { 
       Table1.MaxHeight = availableSpace - heightOfTable2; 
       // Trigger a rerendering 
       Table1.ItemsSource = null; 
       Table1.ItemsSource = List1; 
       ... 

      } 
      ... 
     } 

Cependant je remarquai que la ActualHeight ne change pas quand je fais cela. Le ActualHeight est maintenant plus grand que le MaxHeight spécifié au moment de l'exécution Qu'est-ce que je fais mal?

Répondre

0

pouvez également définir les propriétés de hauteur DataGrid à MaxHeight (si elles dépassent leur MaxHeight actuelle). Il ne reviendra pas contre un changement MaxHeight s'il le dépasse déjà.

Vous ne devriez pas avoir besoin de déclencher un rendu ... Avez-vous envisagé de modifier les hauteurs de lignes et la hauteur maximale des lignes des lignes de la grille au lieu des classes de données? Les choses semblent beaucoup plus fluides quand je manipule les hauteurs des lignes plutôt que la hauteur du contenu. Il est également judicieux dans votre exemple que vous essayez d'affecter essentiellement la hauteur de ligne restante (lignes 2 & 4) sur une base calculée. La modification des tailles de DataGrid semble incorrecte.

nom juste des lignes individuelles avec x: Name = "Row2" etc comme vous le feriez pour tout autre élément. J'utilise en fait la liaison de données des hauteurs de lignes de la grille pour calculer les propriétés doubles (car j'utilise MVVM), mais le code-behind semble être l'endroit pour votre exemple.