我总是在动态布局控件(如Stackpanel)中使用ListView时遇到问题。
现在我有一个带有Stackpanel的Window作为Root-Control。 Stackpanel完美地拉伸并占据整个窗口。在StackPanel内部还有其他一些控件,比如文本框和按钮,它们都很好地对齐。
最后一个Object是ListView。我希望ListView从StackPanel中获取剩余的空间,但它没有。即使使用 VerticalAlignment =“Stretch”,我也只能获得列标题。 ListView仅在项目添加到项目时才会增长。所以我必须手动设置ListView高度。
如果ListView中的剩余空间是空的,我怎样才能使ListView填充?
答案 0 :(得分:36)
这与ListView无关。这是StackPanel的“错误”。在StackPanel中,子项始终仅消耗它们所需的空间(在StackPanel的方向上)。这就是StackPanel的设计方式。使用DockPanel,在那里你可以使用LastChildFill="true"
(true
是默认的,填充剩下的所有空间,因此不需要明确指定它。)
<DockPanel Background="Green">
<Button DockPanel.Dock="Top">Text</Button>
<ListView DockPanel.Dock="Top">
<ListView.View>
<GridView>
<GridViewColumn/>
</GridView>
</ListView.View>
</ListView>
</DockPanel>
答案 1 :(得分:16)
使用网格怎么样?网格是为这种布局而制作的。 DockPanel也是一个很好的建议。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="row1"/>
<Button Grid.Row="1" Content="row2"/>
<ListView Grid.Row="2">
<ListViewItem Content="Text"/>
<ListViewItem Content="Text1"/>
<ListViewItem Content="Text2"/>
</ListView>
</Grid>
重要的部分是Height =“*”,它告诉行占用所有可用空间,如果你想要它可以将其保留,因为它是默认行为。