2015-09-01 2 views
-1

Стыковочная панель обладает тем свойством, что последнему пристыкованному управлению присваивается все оставшееся пространство. Это создает эффект: ping-ping-ping-piiiing, при отсутствии реального визуального представления.Создание промежуточного компонента над оставшимся пространством в панели док-станции

Хотелось бы получить ситуацию, когда верхняя часть большинства элементов управления нижней и нижней частью сжимается вниз, а оставшееся пространство назначается среднему управлению (или вообще отсутствует, так как середина окна должна быть пустой и визуально заметные элементы управления будут размещены только по краям). Созданный эффект будет: ping-ping-piiiing-ping.

Предположим, что окно будет иметь все ярлыки, коробки и т. Д. Наверху (прикреплено к верхней части панели) и панель стека с пучком кнопок внизу (состыкованы до нижней части панели и выравнивание по горизонтали вправо), аналогично блоку сообщений.

Как я могу это достичь? Может быть, панель док-станции должна сочетаться с каким-либо другим устройством? Или, может быть, я должен использовать другой макет? В Свинге, много лет назад, был этот контейнер север/юг/восток/запад.

ответ

2

Если вы хотите, чтобы последний элемент, чтобы быть «средний» один и занять оставшееся место, вы можете настроить этот макет:

<DockPanel LastChildFill="True"> 

    <StackPanel Orientation="Horizontal" DockPanel.Dock="Top"> 
     Labels, boxes 
    </StackPanel> 

    <StackPanel Orientation="Horizontal" DockPanel.Dock="Bottom"> 
     Buttons here 
    </StackPanel> 

    <Label></Label>   

</DockPanel> 

Это то, что вы имеете в виду? Обратите внимание, что последний элемент (пустая метка) не имеет стыковки. Обычно этот подход используется, если «последний ребенок» представляет собой расширяемый элемент управления пользовательского интерфейса (или набор элементов управления), подобный ListBox.


Альтернатива:

Для вашей цели, вы можете также создать таблицу с тремя строками, и дать среднему ряду всю оставшуюся высоту:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" />    
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Label Grid.Row="0">Top row</Label> 
    <Label Grid.Row="2">Bottom row</Label>   
</Grid> 
+0

О, я понять подход. Это работает, определенно, но я не могу не чувствовать, что это работа, а не реальное решение. Причиной этого является тот факт, что XML-подобная разметка не должна зависеть от ее порядка. Брат - брат. По крайней мере, в чистой теории, хе-хе. –

+0

Да, в этом случае порядок важен. Думаю, единственной альтернативой команды разработчиков WPF было бы включить имя (x: key) дочернего элемента управления, которое должно заполнить пробел в атрибуте DockPanel (что означало бы, что вы должны назвать этот элемент). – Martin

+0

Это, по-моему, было бы еще больше против XMLishness. Есть ли еще один, менее известный менеджер панелей или макетов, который имеет пустой элемент управления, автоматически добавленный последним, чтобы включить поведение, если мне не нужно делать это самостоятельно? –