ListView dentro de StackPanel dentro de Grid no escala
-
20-12-2019 - |
Pregunta
En una aplicación de Windows 8.1 (.NET 4.5) tengo (en dos plantillas, debido al enlace) una cuadrícula que contiene un StackPanel que contiene un ListView.La cuestión es que ListView no se escala con el espacio disponible, sino que muestra una barra de desplazamiento.
<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>
Plantilla para 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>
Y la plantilla para el segundo ListView
<TextBlock Text="{Binding descricao}"
Margin="5"
Style="{StaticResource BodyTextBlockStyle}"
TextWrapping="WrapWholeWords"/>
Captura de pantalla:
Me gustaría que ListView con la barra de desplazamiento tenga su escala de tamaño para ajustarse al contenido y solo se desplace si se queda sin espacio en la pantalla.
Solución
Este es un problema extremadamente común...el StackPanel
hace no cambiar el tamaño de su contenido para que se ajuste al control principal como un Grid
hace.La solución es sencilla...no uses un StackPanel
excepto por lo más simple de alinear algunas tareas de control.En lugar de esto, utilice un Grid
que se ajustará automáticamente a todo el espacio proporcionado por los controles principales.