2013-10-08 7 views
0

Как получить эти док-панели справа?Две док-панели внутри другой док-панели

<DockPanel Grid.Row="1" LastChildFill="True" HorizontalAlignment="Stretch"> 
    <DockPanel Width="400" LastChildFill="False" HorizontalAlignment="Left"> 
      <DockPanel> 
       <TextBlock Width="400" /> 
      </DockPanel> 
      <DockPanel Height="35" DockPanel.Dock="Bottom" LastChildFill="False"> 
       <Button x:Name="btnRefresh" Content="Refersh" /> 
      </DockPanel> 
    </DockPanel> 

DockPanel с TextBlock охватывает над в DockPanel, что стыковка на дне, я хочу, чтобы соответствовать прямо к нему. Есть идеи?

Оказалось, что панель, прикрепленная к основанию, должна пройти док-станцию ​​над ней в декларации xaml. LastChildFill = «True» относится к элементу управления, объявленному последним в коде.

<DockPanel Grid.Row="1" LastChildFill="True" HorizontalAlignment="Stretch"> 
    <DockPanel Width="400" LastChildFill="False" HorizontalAlignment="Left"> 
     <DockPanel Height="35" DockPanel.Dock="Bottom" LastChildFill="False"> 
      <Button x:Name="btnRefresh" Content="Refersh" /> 
     </DockPanel> 
     <DockPanel> 
      <TextBlock Width="400" /> 
     </DockPanel> 
    </DockPanel> 

ответ

3

Пожалуйста, обратитесь к DockPanel Class странице в MSDN, которая имеет всю необходимую помощь, что вам нужно. Пример XAML из связанной страницы:

<DockPanel LastChildFill="True"> 
    <Border Height="25" Background="SkyBlue" BorderBrush="Black" BorderThickness="1" 
     DockPanel.Dock="Top"> 
     <TextBlock Foreground="Black">Dock = "Top"</TextBlock> 
    </Border> 
    <Border Height="25" Background="Blue" BorderBrush="Black" BorderThickness="1" 
     DockPanel.Dock="Top"> 
     <TextBlock Foreground="White">Dock = "Top"</TextBlock> 
    </Border> 
    <Border Height="25" Background="Yellow" BorderBrush="Black" BorderThickness="1" 
     DockPanel.Dock="Bottom"> 
     <TextBlock Foreground="Black">Dock = "Bottom"</TextBlock> 
    </Border> 
    <Border Width="200" Background="PaleGreen" BorderBrush="Black" BorderThickness="1" 
     DockPanel.Dock="Left"> 
     <TextBlock Foreground="Black">Dock = "Left"</TextBlock> 
    </Border> 
    <Border Background="White" BorderBrush="Black" BorderThickness="1"> 
     <TextBlock Foreground="Black">This will fill the remaining space</TextBlock> 
    </Border> 
</DockPanel> 

Обратите внимание на использовании DockPanel.Dock вложенных свойств.

enter image description here

+0

+1 Ну, я посмотрел на это * сегодня * и благодарен за выставку! Я не понимаю, как исчезла иконка системы ... –

+0

Ooops ... У меня есть приложение WPF, которое я использую для тестирования ответов, таких как этот, и у него все еще есть код в нем, который я использовал ответить на [другой вопрос] (http://stackoverflow.com/questions/18580430/hide-the-icon-from-a-wpf-window), в котором спрашивали, как удалить «Icon» из окна «WPF». – Sheridan

+0

Пример NIce, для меня извлеченный урок состоит в том, что LastChildFill = «True» применяется к последнему элементу управления в декларации, поэтому панель, которая состыкована внизу, должна предшествовать другим в xaml. – Gerard

1
<DockPanel Grid.Row="1" LastChildFill="True" HorizontalAlignment="Stretch"> 
    <DockPanel Width="400" LastChildFill="False" HorizontalAlignment="Left"> 
     <Button x:Name="btnRefresh" Content="Refersh" 
       Height="35" DockPanel.Dock="Bottom" /> 

     <TextBlock Width="400" /> 
    </DockPanel> 

    <!-- Other UI Elements here? --> 

<DockPanel> 
+0

Ну, ваше решение не стопка из двух dockpanels, но фитинг правильно. Я обнаружил, почему это так: ваши элементы управления находятся в другом порядке, поэтому порядок важен. – Gerard

+0

@gerard вам не нужна панель «DockPanel» или любой другой тип с одним ребенком. Это не имеет смысла. Панели предназначены для того, чтобы иметь несколько детей, чтобы они могли правильно их раскладывать. –

+0

Панели получат многодетных детей, это был всего лишь пример. – Gerard