Question

Dans une application Windows 8.1 (.NET 4.5), j'ai (sur deux modèles, en raison de la liaison) une grille qui contient un StackPanel qui contient un ListView.Le fait est que ListView ne s'adapte pas à l'espace disponible, mais affiche une barre de défilement.

<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>

Modèle pour 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>

Et le modèle pour le deuxième ListView

<TextBlock Text="{Binding descricao}"
    Margin="5"
    Style="{StaticResource BodyTextBlockStyle}"
    TextWrapping="WrapWholeWords"/>

Capture d'écran:Screenshot

J'aimerais que le ListView avec la barre de défilement ait une échelle de taille adaptée au contenu et ne défile que s'il manque d'espace à l'écran.

Était-ce utile?

La solution

C'est un problème extrêmement courant...le StackPanel fait pas redimensionner son contenu pour l'adapter au contrôle parent comme un Grid fait.La solution est simple...n'utilisez pas de StackPanel sauf pour le plus simple consistant à aligner quelques tâches de contrôle.Au lieu de cela, utilisez un Grid qui s'adaptera automatiquement à tout l'espace fourni par les contrôles parents.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top