2015-06-04 4 views
1

У меня есть окно с DockPanel, и в DockPanel у меня есть два пользовательских элемента управления. Пользовательский элемент управления «header» находится в верхней части окна, как я ожидаю. Тем не менее, пользовательский элемент «нижний колонтитул» не состыковывается в самом низу окна, но вместо этого кажется, что он закроет около 500 пикселей под заголовком. Возможно, еще 300 пикселей (я просто догадываюсь, где он появляется в окне) ниже «нижнего колонтитула» только пустого пространства.Ребенок, не отображающий ожидаемое положение DockPanel

Контроль заголовка имеет DesignHeight 100, а контроль сноски имеет DesignHeight 20.

Почему футер не стыковочный в самом низу окна?

код 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.Dock для последнего ребенка в DockPanel ничего не делает, потому что имущество DockPanel в LastChildFill устанавливается истина по умолчанию. Поэтому не имеет значения, какое свойство DockPanel.Dock вы назначаете - если это последний ребенок, он будет заполнять оставшуюся часть DockPanel.

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

Существует несколько решений, которые зависят от ваших намерений дизайна.

  • Поместите другой объект после нижнего колонтитула (например, сетку). Это типичное использование панели DockPanel - панелей инструментов, статусных баров, меню и т. Д. Сначала состыкованы, а основное содержимое представления - это последний объект в DockPanel (он заполнит оставшееся пространство).
  • Поместите нижний колонтитул перед заголовком. Это приведет к тому, что нижний колонтитул будет состыкован первым, а заголовок заполнит остаток, что может быть тем, что вы хотите сделать.
  • В качестве альтернативы установите для параметра LastChildFill DockPanel значение false. Это заставит ваши пристыкованные объекты вести себя правильно, но оставшееся пространство в DockPanel не будет заполнено, если вы добавите к нему еще один объект.
  • Используйте другой элемент управления. Сетка также может быть подходящим элементом управления - 3 строки, первая с высотой Auto, вторая без определенной высоты (или высота * или 1 *, если вы хотите быть явным), а третья с высотой Авто.
+0

Отлично! Спасибо за информацию о свойстве LastChildFill. Я видел это и читал об этом, но не понимал, что это будет иметь приоритет над свойством Dock на последнем дочернем элементе. Большое спасибо за помощь. – Jagd