如何使 StackPanel 或 DockPanel 拉伸以适应 WPF 中的容器?
我有一个 Grid
作为根容器,定义了两列(只有一行).
第一列具有灵活的宽度,第二列具有 300 像素的固定宽度.
接下来,我在第二列内放置了一个 ListBox
以水平和垂直拉伸,即填充整个第二列.
最后,我为 ListBox
定义了一个项目模板,它是一个垂直方向的 StackPanel
,带有一个 DockPanel
和几个 TextBlock
里面.
I have a Grid
as a root container with two columns defined (There's only one row).
The first column has flexible width and second column has 300px fixed width.
Next, I have placed a ListBox
inside the second column to stretch both horizontally and vertically, i.e. to fill the entire second column.
Lastly, I have defined an Items Template for the ListBox
to be a vertically oriented StackPanel
, with one DockPanel
and a couple of TextBlock
s inside.
<!-- 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
的整个宽度,即它的父级?现在发生的是,即使StackPanel
中TextBlock
的宽度超过DockPanel
的宽度,它也不会拉伸以匹配它们的宽度.
- How do I make the
StackPanel
fill the entire width of theListBox
? Right now, it only takes enough space to accomodate theDockPanel
and theTextBlock
s inside. It won't fit the width of theListBox
orListBoxItem
. - Next, how do I make the
DockPanel
fill the entire width of theStackPanel
, i.e. its parent? What happens right now is that even if the width of theTextBlock
s in theStackPanel
exceed the width of theDockPanel
, it won't stretch to match their width.
感谢您的帮助.
您可以通过在 ItemContainerStyle 中设置 HorizontalContentAlignment
来使每个 ListBoxItem
的 Content 拉伸
You can make the Content of every ListBoxItem
stretch by setting HorizontalContentAlignment
in the ItemContainerStyle
<ListBox ...>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>