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.)
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
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. –
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