Как сделать StackPanel или DockPanel растягиваться в соответствии с их контейнерами в WPF?
У меня есть Grid
как корневой контейнер с двумя определенными столбцами (там только одна строка).
Первый столбец имеет гибкую ширину, а второй столбец имеет фиксированную ширину 300 пикселей.
Затем я поместил ListBox
во второй столбец, чтобы растянуть как горизонтально, так и вертикально, т.е. Заполнить весь второй столбец.
Наконец, я определил шаблон элементов для ListBox
как вертикально ориентированный StackPanel
, с одним DockPanel
и парой TextBlock
внутри.
<!-- Data template for ListBox -->
<DataTemplate DataType="{x:Type entities:Track}">
<StackPanel Orientation="Vertical">
<DockPanel>
<TextBlock DockPanel.Dock="Left" Text="Now playing" />
<TextBlock DockPanel.Dock="Right" Text="Time remaining" />
</DockPanel>
<TextBlock Text="{Binding Artist}" />
<TextBlock Text="{Binding Title}" />
</StackPanel>
</DataTemplate>
...
<ListBox
Grid.Column="1"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" />
У меня есть два вопроса:
- Как мне сделать
StackPanel
заполнить всю ширину ListBox
? Прямо сейчас для размещения DockPanel
и TextBlock
внутри достаточно места достаточно. Он не будет соответствовать ширине ListBox
или ListBoxItem
.
- Далее, как мне сделать
DockPanel
заполнить всю ширину StackPanel
, т.е. ее родителя? Что происходит прямо сейчас, так это то, что даже если ширина TextBlock
в StackPanel
превышает ширину DockPanel
, она не будет растягиваться, чтобы соответствовать их ширине.
Спасибо за помощь.
Ответы
Ответ 1
Содержимое каждого растягивания ListBoxItem
можно установить, установив HorizontalContentAlignment
в ItemContainerStyle
<ListBox ...>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>