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

Bor*_*ris 14 wpf

我有一个Grid根容器,定义了两列(只有一行).
第一列具有灵活的宽度,第二列具有300px的固定宽度.
接下来,我ListBox在第二列内部放置了水平和垂直拉伸,即填充整个第二列.
最后,我已经为ListBox一个垂直方向定义了一个项目模板StackPanel,里面有一个DockPanel和几个TextBlocks.

<!-- 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" />
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 如何StackPanel填充整个宽度ListBox?现在,它只需要足够的空间来容纳内部DockPanelTextBlock内部.它不适合ListBox或的宽度ListBoxItem.
  2. 接下来,如何DockPanel填充整个宽度StackPanel,即其父级?现在发生的事情是,即使TextBlocks StackPanel的宽度超过了DockPanel它的宽度,它也不会伸展以匹配它们的宽度.

谢谢您的帮助.

Fre*_*lad 24

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

<ListBox ...>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListBox.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)