Child 未显示在 DockPanel 的预期位置

Child not displaying in expected position of DockPanel

我有一个带有 DockPanel 的 Window,在 DockPanel 中我有两个用户控件。 "header" 用户控件停靠在 window 的顶部,如我所料。但是,"footer" 用户控件并没有停靠在 window 的最底部,而是似乎停靠在 header 下方大约 500 像素处。在 space.

的 "footer" 下方可能还有 300 个像素(我只是猜测它出现在 window 中的位置)

header 控件的设计高度为 100,页脚控件的设计高度为 20。

为什么页脚没有停靠在 Window 的最底部?

MainWindow.xaml代码:

<Window x:Class="RATTA.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:RATTA.ViewModel"
        xmlns:vw="clr-namespace:RATTA.View"
        Title="RATTA" Height="800" Width="600" Background="WhiteSmoke">

        <DockPanel Width="Auto" Height="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">

            <vw:HeaderVw DataContext="MainHeaderVM" DockPanel.Dock="Top" />

            <vw:FooterVw DataContext="MainFooterVM" DockPanel.Dock="Bottom" />

        </DockPanel>
</Window>

DockPanel 中最后一个 child 的 DockPanel.Dock 属性 不执行任何操作,因为 DockPanel 的 属性 LastChildFill 默认设置为 true。因此,分配什么 DockPanel.Dock 属性 并不重要——如果它是最后一个 child,它将填充 DockPanel 的其余部分。

之所以看起来距离 header 和 window 的底部大约 300px,是因为当最后一个 child 填充时,如果最后一个 child的高度已明确设置,它将位于其余 space.

的中心

根据您的设计意图,有一些解决方案。

  • 在页脚后放置另一个 object(例如网格)。这是 DockPanel 的典型用法——工具栏、状态栏、菜单等首先停靠,视图的主要内容是 DockPanel 中的最后一个 object(它将填充剩余的 space) .
  • 将页脚放在 header 之前。这将导致页脚首先停靠,header 将填充剩余部分,这可能是您想要做的。
  • 或者,将 DockPanel 的 LastChildFill 设置为 false。这将导致停靠的 object 正常运行,但如果您向其添加另一个 object,DockPanel 中剩余的 space 将不会被填充。
  • 使用不同的控件。 Grid 也可以是合适的控件——3 行,第一行的高度为 Auto,第二行没有指定高度(或者高度为 * 或 1*,如果你想明确的话),第三行的高度为自动。