1

我在 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 的固定高度,因为我需要支持不同的屏幕分辨率。我需要自动高度。我怎样才能做到这一点?

4

1 回答 1

3

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

删除它们,设置Grid.RowListBox调整边距。

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

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

您不必为了 UI 工作而移除网格,但您也不需要它。嵌套越少越好。

于 2012-07-01T19:15:56.737 回答