Сетка 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>
Другие вопросы по тегам