2015-06-04 23 views
1

我有一个DockPanel的窗口,并且在DockPanel中我有两个用户控件。 “标题”用户控件停靠在窗口顶部,就像我期望的那样。但是,“页脚”用户控件不会停靠在窗口的最底部,而是停靠在标题下方约500个像素处。在空白空间的“页脚”下方可能还有300个像素(我只是猜测它出现在窗口中的哪个位置)。孩子没有显示DockPanel的预期位置

报头控制为100,DesignHeight,和页脚控制具有20

一个DesignHeight为什么页脚不是在窗口的最底部对接?

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> 

回答

3

因为DockPanel中的财产LastChildFill被默认设置为true DockPanel.Dock属性在DockPanel中的最后一个子什么都不做。因此,分配的DockPanel.Dock属性并不重要 - 如果它是最后一个孩子,它将填充DockPanel的其余部分。

从头部和窗口底部看起来大约300px的原因是因为如果最后一个孩子的身高明确设置,最后一个孩子将会坐在剩余空间的中心。

有几种解决方案取决于您的设计意图。

  • 在页脚之后放置另一个对象(例如Grid)。这是DockPanel的典型用法 - 工具栏,状态栏,菜单等先停靠,视图的主要内容是DockPanel中的最后一个对象(它将填充剩余空间)。
  • 在页眉之前放置页脚。这将导致页脚首先停靠,页眉将填充剩余部分,这可能是您想要的。
  • 或者,将DockPanel的LastChildFill设置为false。这会导致停靠的对象正常运行,但如果向其中添加另一个对象,则不会填充DockPanel中的剩余空间。
  • 使用不同的控件。一个Grid也可以是一个合适的控件 - 3行,第一行高度为Auto,第二行没有指定的高度(或者如果你想要显式高度为*或1 *),第三行高度汽车。
+0

完美!感谢LastChildFill属性的信息。我看过它并阅读了它,但没有意识到它将优先于最后一个子项目上的Dock属性。非常感谢您的帮助。 – Jagd