【问题标题】:wpf DockPanel issuewpf DockPanel问题
【发布时间】:2011-12-21 18:26:59
【问题描述】:

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

【问题讨论】:

    标签: wpf listview dockpanel


    【解决方案1】:

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

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

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

    【讨论】:

    • 可能我会尝试使用网格解决方案。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-07
        • 2019-12-17
        • 2012-04-04
        • 1970-01-01
        • 2011-05-20
        • 2016-04-17
        • 2013-03-08
        • 1970-01-01
        相关资源
        最近更新 更多