Как заставить StackPanel или DockPanel растягиваться, чтобы вместить их контейнеры в WPF? - PullRequest
14 голосов
/ 22 февраля 2011

У меня есть 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" />

У меня два вопроса:

  1. Как заставить StackPanel заполнить всю ширину ListBox?Прямо сейчас, это занимает достаточно места, чтобы вместить DockPanel и TextBlock внутри.Он не будет соответствовать ширине ListBox или ListBoxItem.
  2. Далее, как мне заставить DockPanel заполнить всю ширину StackPanel, то есть его родителя?Что происходит сейчас, так это то, что даже если ширина TextBlock s в StackPanel превышает ширину DockPanel, он не будет растягиваться, чтобы соответствовать их ширине.

Спасибо за помощь.

1 Ответ

24 голосов
/ 22 февраля 2011

Вы можете сделать содержимое каждого ListBoxItem растяжения, установив HorizontalContentAlignment в ItemContainerStyle

<ListBox ...>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListBox.ItemContainerStyle>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...