ListView dentro do StackPanel dentro do Grid não é escalonável
-
20-12-2019 - |
Pergunta
Em um aplicativo Windows 8.1 (.NET 4.5), tenho (em dois modelos, por causa da ligação) uma grade que contém um StackPanel que contém um ListView.O problema é que o ListView não é dimensionado com o espaço disponível; em vez disso, mostra uma barra de rolagem.
<Grid DataContext="{Binding}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/> <!-- IF I set MinHeight here, it grows -->
</Grid.RowDefinitions>
<TextBlock Grid.Row="0"/>
<ListView
Grid.Row="1"
Margin="10"
ItemsSource="{Binding ementas}"
ItemTemplate="{StaticResource temp1}"
SelectionMode="None"
IsItemClickEnabled="False"
IsSwipeEnabled="False">
</ListView>
</Grid>
Modelo para o ListView
<StackPanel Width="310" Margin="5,10,5,10" DataContext="{Binding}">
<TextBlock Text="{Binding data}" Style="{StaticResource TitleTextBlockStyle}"/>
<ListView SelectionMode="None"
IsItemClickEnabled="False"
ItemsSource="{Binding pratos}"
ItemTemplate="{StaticResource temp2}"
IsSwipeEnabled="False">
</ListView>
</StackPanel>
E o modelo para o segundo ListView
<TextBlock Text="{Binding descricao}"
Margin="5"
Style="{StaticResource BodyTextBlockStyle}"
TextWrapping="WrapWholeWords"/>
Captura de tela:
Gostaria que o ListView com a barra de rolagem tivesse sua escala de tamanho para caber no conteúdo e rolasse apenas se ficar sem espaço na tela.
Solução
Este é um problema extremamente comum...o StackPanel
faz não redimensionar seu conteúdo para caber no controle pai como um Grid
faz.A solução é simples...não use um StackPanel
exceto a mais simples de alinhar algumas tarefas de controle.Em vez disso, use um Grid
que caberá automaticamente em todo o espaço fornecido pelos controles pai.