WPF: как растянуть элементы управления в StackPanel?

Ползунок и некоторые другие элементы управления не растягиваются, чтобы заполнить доступное пространство при размещении в StackPanel; вместо этого ширина всегда равна MinWidth (или около 10 пикселей, если MinWidth не установлена). Как заставить его растягиваться (эквивалент Anchor.Left | Anchor.Right в WinForms)? Пример:

<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal">
    <Slider Value="14" SmallChange="0.5" Maximum="100" Minimum="4" 
            x:Name="FontSize" MinWidth="30" LargeChange="2" 
            TickFrequency="10" TickPlacement="TopLeft" 
            HorizontalAlignment="Stretch"/>
    <TextBlock Margin="8" Text="{Binding ElementName=FontSize, Path=Value}" 
               VerticalAlignment="Center"/>
</StackPanel>

person Qwertie    schedule 06.05.2009    source источник
comment
См .: stackoverflow.com/a/38923924/948700   -  person Dvor_nik    schedule 12.08.2016


Ответы (1)


Вместо этого вам нужна DockPanel:

<DockPanel DockPanel.Dock="Bottom" LastChildFill="True">
    <TextBlock DockPanel.Dock="Right" ... />
    <Slider ... />
</DockPanel>

DockPanel предоставляет вам желаемую функциональность «привязки». StackPanel просто складывает элементы рядом друг с другом.

Из вашего блока кода я заметил, что ваша StackPanel уже закреплена внутри док-панели, поэтому я включил тот же атрибут стыковки в свой пример кода выше.

person Matt Hamilton    schedule 06.05.2009
comment
Что, если в StackPanel первый и последний должны иметь фиксированный размер, а средний - растягиваемый? Единственное использование DockPanel - это свойство LastChildFill. - person Matthias Pospiech; 18.02.2013
comment
Вам не нужно вставлять элементы в DockPanel в том порядке, в котором они появляются. - person SamiHuutoniemi; 20.10.2013