2009-09-22 6 views
0

Dites que j'ai deux éléments dans une fenêtre.
Je voudrais élément A pour remplir tout espace vertcial inutilisé et avoir toujours au moins par exemple. 200px hauteur.
L'élément B aura peu de tailles fixes (expander) et il devrait être donné l'espace qu'il exige (mais laissant au moins 200px pour A). S'il n'y a pas assez d'espace libre dans une fenêtre, B devrait être défilable.WPF layout devinette

C'est proche de ce que je ne veux pas faire, mais DockPanel ne respecte pas la propriété MinHeight.

<DockPanel> 
    <ScrollViewer DockPanel.Dock="Bottom"> 
    <B/> 
    </ScrollViewer> 
    <A MinHeight="200"/> 
</DockPanel> 

Y at-il un moyen de le faire en utilisant des panneaux natifs WPF?

Répondre

2

Un DockPanel traitera toujours les panneaux dans l'ordre dans lequel ils sont définis; cela ne rendra pas un élément ancré plus petit juste parce que le dernier élément a un MinHeight.

Je voudrais utiliser une grille:

<Grid> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="*" MinHeight="200" /> 
    <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <A Grid.Row="0"/> 
    <ScrollViewer Grid.Row="1"> 
    <B/> 
    </ScrollViewer> 
</Grid> 
+0

Cela ne fonctionnerait pas. Cela ne correspond pas à l'exigence d'origine "S'il n'y a pas assez d'espace libre dans une fenêtre, B devrait être défilable". Lorsque vous définissez Hauteur sur Auto, Grid vous donne la taille que vous souhaitez. ScrollViewer n'aura donc jamais de barres de défilement tant que vous n'aurez pas durci sa hauteur. – Anvaka

+0

Comme Anvaka l'a dit, ça ne marchera pas. –

+0

Vous avez raison, la deuxième rangée sera en dessous de la fenêtre contenant. Il ne semble pas y avoir un moyen de dire "Auto, mais seulement s'il y a assez de place" Je suppose que vous aurez besoin de code pour le faire (panneau de disposition personnalisé, ou attacher à un gestionnaire d'événements et définir la taille explicitement) – Daniel