2016-07-08 92 views
0

之間的面板,我有三個小組:碼頭一個兩個人

This is what I want to achieve on image

第一個是在頂部,它僅持有一些按鈕。它會和許多按鈕一樣高。

第二個應該在它的正下方,它擁有一個應該佔據大部分窗口的畫布。

第三個是「某種」狀態欄,它會包含一些標籤和數據。它的數量也會和很多標籤一樣高。

我不想硬編碼任何大小。所以我將第一個面板對接到父項的頂部。第二個面板(畫布)也是如此。我也將它對接到頂端。第三個面板停靠在底部。

我不能讓畫布(第二個面板)填滿第一個面板和第三個面板之間的整個空間。怎麼做?

<Window x:Class="MyProject.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:MyProject" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="700" Width="800"> 
    <DockPanel LastChildFill="False"> 
     <StackPanel DockPanel.Dock="Top"> 
      <GroupBox x:Name="grBoxSettings" Header="Settings" HorizontalAlignment="Stretch" VerticalAlignment="Top" Height="90" Margin="5,0,5,0"> 
       <WrapPanel x:Name="wrapPanelButtons" HorizontalAlignment="Left" VerticalAlignment="Top" Width="110"> 
        <Button x:Name="btnTest" Content="Test" Margin="5,0,0,0" HorizontalAlignment="Center" VerticalAlignment="Top" Width="100"/> 
       </WrapPanel> 
      </GroupBox> 
     </StackPanel> 

     <Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch" DockPanel.Dock="Top"/> 

     <DockPanel LastChildFill="False" DockPanel.Dock="Bottom"> 
      <GroupBox Header="Version" DockPanel.Dock="Right"> 
       <Label x:Name="lblVersion"/> 
      </GroupBox> 
     </DockPanel> 
    </DockPanel> 
</Window> 

回答

4

要麼使用Grid有三個RowDefinitionsHeight= 1:Auto第二:1* 3:Auto, 或者乾脆在你DockPanel周圍的順序切換:

<DockPanel LastChildFill="True"> 
     <StackPanel DockPanel.Dock="Top"> 
      <GroupBox x:Name="grBoxSettings" Header="Settings" HorizontalAlignment="Stretch" VerticalAlignment="Top" Height="90" Margin="5,0,5,0"> 
       <WrapPanel x:Name="wrapPanelButtons" HorizontalAlignment="Left" VerticalAlignment="Top" Width="110"> 
        <Button x:Name="btnTest" Content="Test" Margin="5,0,0,0" HorizontalAlignment="Center" VerticalAlignment="Top" Width="100"/> 
       </WrapPanel> 
      </GroupBox> 
     </StackPanel> 


     <DockPanel LastChildFill="False" DockPanel.Dock="Bottom"> 
      <GroupBox Header="Version" DockPanel.Dock="Right"> 
       <Label x:Name="lblVersion"/> 
      </GroupBox> 
     </DockPanel> 

     <Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> 
    </DockPanel> 

而且,這裏的一些文檔對於Dock Property

如果您將LastChildFill屬性設置爲true(默認設置),則無論您在最後一個子元素上設置了任何其他停靠點值,DockPanel的最後一個子元素都會填充剩餘空間。要以另一個方向停靠孩子,您必須將LastChildFill屬性設置爲false,並且還必須在最後一個子元素上設置明確的停靠方向。

相關問題