Сетка RowDefinintion фиксированная Высота игнорируется
У меня есть простая Сетка с двумя рядами, первый из которых имеет фиксированную высоту. Внутри у меня есть элемент с RowSpan="2", а сверху еще один элемент, который должен находиться только в первом ряду:
<Grid Background="Lime">
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Rectangle Grid.RowSpan="2" Height="50" Fill="Blue"/>
<TextBlock Grid.Row="0" Text="Foo" VerticalAlignment="Center" Background="Red"/>
</Grid>
Тем не менее, фактическая высота первого ряда просто игнорирует настройку высоты, будучи намного больше, чем ожидалось.
Это ошибка в сетке? Как я могу обойти это?
4 ответа
Я думаю, что вы хотите что-то вроде этого:
<Grid Background="Lime">
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Rectangle Grid.RowSpan="2" Height="50" VerticalAlignment="Center" Fill="Blue"/>
<TextBlock Grid.Row="0" Text="Foo" VerticalAlignment="Center" Background="Red"/>
</Grid>
Я не уверен, если иметь RowSpan
это охватывает RowDefinition
с Height="*"
будет работать.
В этом случае вы должны использовать VerticalAlignment, чтобы растянуть, чтобы заполнить высоту вашего RowDefinition.
<Grid Background="Lime">
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Rectangle Grid.RowSpan="2" Height="50" Fill="Blue"/>
<TextBlock Name="texto" Grid.Row="0" Text="Foo" VerticalAlignment="Stretch" Background="Red"/>
</Grid>
На этом пути вы увидите, что ваш TextBox растянут до высоты строки.
Я также попробовал это несколько раз, но это не сработает. Я думаю, что это дизайн. Разве вы не можете просто поместить прямоугольник как родительский элемент сетки в xaml?
Кажется, это не работает. Вместо этого я просто использовал VerticalAlignment
свойство перемещать TextBlock
и полностью удалили RowDefinitions:
<Grid Background="Lime">
<Rectangle Height="50" Fill="Blue"/>
<TextBlock Grid.Row="0" Text="Foo" VerticalAlignment="Top" Background="Red" Height="20"/>
</Grid>