如何使StackPanel或DockPanel拉伸以适应WPF中的容器?

时间:2011-02-22 14:45:50

标签: wpf

我有一个Grid作为根容器,定义了两列(只有一行) 第一列具有灵活的宽度,第二列具有300px的固定宽度 接下来,我在第二列中放置了一个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的整个宽度?现在,它只需要足够的空间来容纳DockPanelTextBlock内部。它不符合ListBoxListBoxItem
  2. 的宽度
  3. 接下来,如何让DockPanel填充StackPanel的整个宽度,即其父级?现在发生的事情是,即使TextBlockStackPanel的宽度超过DockPanel的宽度,它也不会拉伸以匹配其宽度。
  4. 感谢您的帮助。

1 个答案:

答案 0 :(得分:24)

您可以通过在ItemContainerStyle中设置ListBoxItem来制作每个HorizontalContentAlignment拉伸的内容

<ListBox ...>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListBox.ItemContainerStyle>