0

我有带有 ListView 和 StackPanel 的 DockPanel:

<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 重叠。为什么?

4

3 回答 3

3

我相信问题在于你LastChildFill自己DockPanel。正如MSDN所解释的, LastChildFill 使您的 StackPanel 占用 DockPanel 中的剩余空间,即使您已将其设置为停靠在底部。尝试删除该属性并查看是否有帮助。

编辑:单独删除属性不会这样做。我通过交换 ListView 和 StackPanel 得到了预期的行为,但这改变了选项卡顺序(虽然这里它只是在两个项目之间,所以将焦点设置到 ListView 使它看起来正确)。

或者,您可以使用具有两行的网格——第一行的 ListView 高度为“*”,第二行的 StackPanel 高度为“Auto”?或者这是对更复杂的布局的简化,而这不起作用?

于 2011-11-04T06:03:08.180 回答
0

正如@DocMax 所说,只有在所有先前的孩子都被占用后,停靠面板中有一些可用空间时,最后一个孩子填充才会起作用。因为ListView有大量的行,空间已经被它占用了,所以 stackpanel 没有空间可以占用。

我建议您向堆栈面板提供一些 MinHeight。

于 2011-11-04T06:12:45.747 回答
0

如果不想使用 Grid,可以先添加 StackPanel,再添加 ListView,使用LastChildFill="True".

于 2012-06-01T16:26:29.680 回答