2016-07-08 2 views
0

У меня есть три панели:Dock одна панель между двумя другими

This is what I want to achieve on image

Первый находится на вершине, она имеет только несколько кнопок. Он будет таким же высоким, как и многие кнопки.

Второе должно быть прямо под ним, оно удерживает холст, который должен занимать большую часть окна.

Третий - это «некоторая» строка состояния, в нем будут храниться некоторые метки и данные. Он также будет только до тех пор, пока там не будет добавлено много ярлыков.

Я не хочу жестко кодировать любые размеры. Поэтому я устанавливаю первую панель в верхнюю часть родителя. То же самое касается второй панели (холст). Я тоже стыкую его с вершиной. Третья панель состыкована с нижней.

Я не могу сделать холст (2-я панель) заполнить все пространство между 1-й панелью и 3-й панелью. Как это сделать?

<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 с тремя RowDefinitions с Height= первым: Auto второй: 1* третий: 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 и также должны установить явное направление док-станции на последнем дочернем элементе.

Смежные вопросы