RowDefinition Height = Auto не работает?

Пожалуйста, посмотрите на мой код ниже:

<Border Background="#242328" CornerRadius="10" Opacity="0.9">
    <Grid Width="400">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="80"/>
        </Grid.RowDefinitions>
        <TextBlock Text="{Binding [someViewModel].Title}" Margin="0,20,0,20"/>

        <StackPanel Grid.Row="1" Orientation="Vertical">
            <TextBlock Margin="20,0,0,0" Text="{Binding [someViewModel].AnotherText}"/>
        </StackPanel>

        <StackPanel Grid.Row="2" Orientation="Vertical">
            <Image Source="{Binding [someViewModel].source}" Width="100" Height="100"/>
            <TextBlock Margin="20,0,0,0" Text="{Binding [someViewModel].AnotherText2}"/>
        </StackPanel>

        <Grid Grid.Row="3" Width="250" Margin="0,10,10,10">
            <Button Width="120" Height="50" Background="#638699" Content="OK" FontSize="18"/>
        </Grid>
    </Grid>
</Border>

Вывод кода выше:

Теперь мой вопрос очень прост: почему над кнопкой есть свободное место? Я уже установил все RowDefinition Height="Auto", если в моей переменной нет никакого значения, разве окно не должно сжиматься влево?

Обратите внимание, что все переменные, такие как [someViewModel].Title, [someViewModel].AnotherText, [someViewModel].AnotherText2, [someViewModel].Source будут нулевыми

2 ответа

Решение

Посмотрите на своего дизайнера, и вы увидите нечто подобное

дизайнер

Ваши TextBlock и StackPanels будут отображаться, и не имеет значения, имеют они значение или нет. Если вы хотите скрыть их, когда они не имеют значения, вы можете использовать IValueConverter, чтобы определить их видимость на основе их содержимого.

Некоторые из ваших элементов управления в Auto размерные строки имеют высоту> 0, даже если они ничего не отображают. Это приводит к тому, что вычисленная высота строки также будет> 0.

Например, Margin на ваше TextBlock вызывает расчетную высоту. Так же Image Высота управления установлена ​​на 100, независимо от того, назначаете ли вы источник или нет.

Другие вопросы по тегам