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*,如果你想明确的话),第三行的高度为自动。
我有一个带有 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*,如果你想明确的话),第三行的高度为自动。