2010-03-31 5 views
2

Je ne peux pas croire que je suis de retour à cette après avoir travaillé avec WPF pendant 3 mois :)mise en page simple grille question

Tenir compte la configuration très commune:

Comment configurer les RowHeights pour que le haut et les lignes du bas (barre de menu et barre d'état) de taille pour s'adapter à la hauteur de leur contenu, et la ligne du milieu (contenu principal), remplit l'espace disponible restant dans le programme?

Je ne peux pas fixer la hauteur des rangées supérieure/inférieure car la hauteur de leur contenu peut varier.

<Window> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 

    <Menu Grid.Row=0> 
    ...menuitems 
    </Menu> 

     <Grid Grid.Row=1> 
     ...main application content here (like most programs) 
     </Grid> 

     <StatusBar> 
     ...statusbaritems 
     </StatusBar> 
    </Grid> 
</Window> 

Répondre

4
<Grid.RowDefinitions> 
    <RowDefinition Height="Auto" /> 
    <RowDefinition Height="*" /> 
    <RowDefinition Height="Auto" /> 
</Grid.RowDefinitions> 

De GridUnitType Enumeration:

Auto: La taille est déterminée par les propriétés de taille du contenu objet. Étoile: La valeur est exprimée en pourcentage pondéré de l'espace disponible.

+0

Merci! Comme il s'est avéré, j'avais une image dans la barre d'état mis à "caché", et il était par défaut était de remplir sa zone disponible. C'est pourquoi ma rangée du bas a continué à prendre jusqu'à 90% de l'écran! :) Une fois que j'ai résolu cela, votre solution a parfaitement fonctionné. –

3

Vous utilisez:

<Grid.RowDefinitions> 
    <RowDefinition Height="Auto" /> 
    <RowDefinition Height="*" /> 
    <RowDefinition Height="Auto" /> 
</Grid.RowDefinitions> 

Auto redimensionne au contenu, et * rempliront l'espace. Si vous aviez plusieurs zones « contenu » entre les deux, vous pouvez utiliser des multiples aussi:

<Grid.RowDefinitions> 
    <RowDefinition Height="Auto" /> 
    <RowDefinition Height="2*" /> <!-- Will be 2/3rd of main space --> 
    <RowDefinition Height="1*" /> <!-- Will be 1/3rd of main space --> 
    <RowDefinition Height="Auto" /> 
</Grid.RowDefinitions>