wpf DockPanel问题

时间:2011-11-04 05:58:32

标签: wpf listview dockpanel

我有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。为什么呢?

3 个答案:

答案 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来解决它。