我在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的固定高度,因为我需要支持不同的屏幕分辨率。我需要自动高度。我怎么能这样做?
答案 0 :(得分:3)
您不需要StackPanel
,因为其中只有一个孩子。名为“ContentPanel”的Grid
也是如此。
删除它们,在Grid.Row
上设置ListBox
并调整边距。
原因是StackPanel
不会限制其子项的高度,无论列表框要求的高度如何 - 堆栈面板提供它,即使意味着列表框不会完全显示。由于列表框正在获得它想要的所有高度,因此它表示不需要滚动。这是对实际发生的事情的简化,但它足以理解正在发生的事情。
StackPanel
在这方面有点“邪恶” - 它会默默地给予孩子想要的任何高度。
您不必删除网格以使UI正常工作,但您也不需要它。较少的嵌套更好。