我有DockView与ListView和StackPanel:
<DockPanel Margin="5" LastChildFill="True">
<ListView Margin="5" ItemsSource="{Binding Source={StaticResource taxGroupSource}}" DockPanel.Dock="Top" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch">
<ListView.View>
<GridView>
<GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding SerialNumber}" />
<GridViewColumn Header="First Name" DisplayMemberBinding="{Binding Name}" />
</GridView>
</ListView.View>
</ListView>
<StackPanel DockPanel.Dock="Bottom" Style="{StaticResource buttonPanel}">
<Button Content="Close" Click="CloseClick"/>
</StackPanel>
</DockPanel>
当GridView有很多行数时,ListView会重叠底部的StackPanel。为什么呢?
答案 0 :(得分:3)
我认为问题是你LastChildFill
上的DockPanel
问题。正如MSDN所解释的那样,LastChildFill使得StackPanel占用DockPanel中的剩余空间,即使您已将其设置为停靠在底部。尝试删除属性并查看是否有帮助。
编辑:仅删除该属性不会。我通过交换ListView和StackPanel得到了预期的行为,但这改变了Tab键顺序(虽然这里只有两个项目,所以将焦点设置为ListView使它看起来正确)。
或者,您可以使用具有两行的网格 - 第一行中的ListView的高度为“*”,而第二行中的StackPanel的高度为“Auto”吗?或者这是一个更复杂的布局的简化,哪些不起作用?
答案 1 :(得分:0)
正如@DocMax所说,如果在所有以前的孩子都被占用后,在dockpanel中有一些可用空间,那么最后一个子填充只会起作用。对于具有大量行的ListView
,空间已被占用,因此堆栈面板没有空间占用。
我建议你向stackpanel提供一些MinHeight。
答案 2 :(得分:0)
如果您不想使用Grid,那么您可以先使用LastChildFill="True"
添加StackPanel然后再添加ListView来解决它。