2015-06-04 22 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