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, независимо от того, назначаете ли вы источник или нет.