ListBox中的自动高度不佳

时间:2012-07-01 11:26:49

标签: c# .net windows-phone-7 xaml listbox

我在XAML中有这段代码

<Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,20">
            <TextBlock x:Name="ApplicationTitle" Text="Title" />
            <TextBlock x:Name="PageTitle" Text="title" Margin="9,-7,0,0" />
        </StackPanel>

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="22,0,12,0">
            <StackPanel>
                <ListBox Name="Cities"Height="Auto" Margin="4,3,0,10">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock FontSize="40" Text="{Binding Name}"></TextBlock>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>
        </Grid>
    </Grid>

当我将项目放入ListBox时,滚动不起作用。我不想设置Listbox的固定高度,因为我需要支持不同的屏幕分辨率。我需要自动高度。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

您不需要StackPanel,因为其中只有一个孩子。名为“ContentPanel”的Grid也是如此。

删除它们,在Grid.Row上设置ListBox并调整边距。

原因是StackPanel不会限制其子项的高度,无论列表框要求的高度如何 - 堆栈面板提供它,即使意味着列表框不会完全显示。由于列表框正在获得它想要的所有高度,因此它表示不需要滚动。这是对实际发生的事情的简化,但它足以理解正在发生的事情。

StackPanel在这方面有点“邪恶” - 它会默默地给予孩子想要的任何高度。

您不必删除网格以使UI正常工作,但您也不需要它。较少的嵌套更好。