2010-09-17 12 views
0

Voici une grille de 2x2, dans lequel la première colonne couvre les deux rangées, mais son contenu à hauteur fixe semble dicter la hauteur minimale pour la première ligne:Grid.RowSpan est-il ignoré lors de la mesure de la hauteur des lignes? (WPF)

<UserControl x:Class="Test" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="300"> 
    <Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 

    <Rectangle Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" Fill="Green" 
     Width="50" Height="50" VerticalAlignment="Top" /> 

    <TextBlock Grid.Row="0" Grid.Column="1" Margin="3" TextWrapping="Wrap"> 
     Some text goes here. 
    </TextBlock> 

    <Button Grid.Row="1" Grid.Column="1" HorizontalAlignment="Right">OK</Button> 
    </Grid> 
</UserControl> 

Dans cet exemple, la La première rangée est toujours au moins 50 haute, comme le montre l'espace utilisé par le TextBlock, même si je voudrais qu'il soit plus court (et par conséquent, le contrôle entier) s'il n'y a pas beaucoup de texte à afficher. Ai-je raté quelque chose, ou est-ce un bug de mise en page WPF?

(Oui, je sais que je pourrais coder facilement avec des grilles imbriquées, mais cela est une distillation simplifiée d'un cas plus complexe.)

Répondre

0

Ce que vous devriez voir est le bouton prenant autant la hauteur car il a besoin et le TextBlock obtenant le reste de la hauteur disponible du contrôle. Puisque la colonne 0 n'a que le rectangle de taille fixe, elle aura toujours une largeur de 50, la colonne 1 prenant le reste de la largeur disponible. Est-ce que vous voyez autre chose ou est-ce qu'il y a quelque chose de différent que vous voulez que la mise en page fasse?

+0

Vous avez raison sur ce que la colonne 1 devrait montrer. Le problème est dans la colonne 0, où la hauteur fixe de l'objet force une hauteur minimale sur le contenu de la ligne 0, colonne 1, alors que la colonne 0 devrait consommer à la place toute la hauteur du contrôle. Ce que je vois est que la ligne 1 contient seulement le bouton, pas la partie inférieure de l'objet 0,0. – vanmelle

+0

Si la hauteur totale de la grille est inférieure à Button.ActualHeight + 50, le rectangle s'affichera comme s'étendant sur les deux lignes, mais il ne le sera pas car il a une hauteur fixe et est aligné sur Top. –

+0

La première partie est vraie, mais ce n'est pas la question. Je ne veux pas définir la hauteur du UserControl, je veux qu'il soit aussi grand que nécessaire et pas plus. Et le VerticalAlignment = Top n'est pas non plus la réponse. Je peux l'enlever, et le Rectangle se centrera dans la première colonne, mais forcera toujours la taille de la première rangée à être au moins 50. Cela me semble être un bug. Peut-être que je devrais aller le signaler à MS et voir ce qu'ils disent. – vanmelle