Grid内的StackPanel里面的ListView没有缩放

时间:2013-11-15 13:07:44

标签: wpf wpf-controls windows-8.1

在Windows 8.1应用程序(.NET 4.5)中,我(通过两个模板,因为Binding)一个Grid,其中包含一个包含ListView的StackPanel。 问题是,ListView不会缩放可用空间,而是显示滚动条。

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

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>

第二个ListView的模板

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

截图: Screenshot

我希望带有滚动条的ListView具有适合内容的大小比例,并且只有在屏幕空间用完时才滚动。

1 个答案:

答案 0 :(得分:2)

这是一个非常常见的问题...... StackPanel 不会调整其内容的大小以适应像Grid那样的父控件。解决方案很简单......除了最简单的排除一些控制职责外,不要使用StackPanel。而不是使用Grid,它将自动适应父控件提供的所有空间。