我有一个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" />
我有两个问题:
- 如何让
StackPanel
填满整个ListBox
的宽度?目前,它只占用足够的空间来容纳DockPanel
和内部的TextBlock
。它不会适应ListBox
或者ListBoxItem
的宽度。 - 接下来,如何让
DockPanel
填满其父级StackPanel
的整个宽度?当前情况是,即使StackPanel
中的TextBlock
的宽度超过了DockPanel
的宽度,它也不会拉伸以匹配它们的宽度。
感谢您的帮助。
DockPanel
拉伸以适应StackPanel
的宽度吗? - BorisDockPanel
设置背景,例如<DockPanel Background="Red">
。它是否可以拉伸?你的问题可能是TextBlock
也在拉伸,尝试为第二个TextBlock
设置HorizontalAlignment="Right"
。 - Fredrik HedbladDockPanel
不会拉伸。对我来说,这有点荒谬,因为在我的情况下,我只有左右两个元素。你知道有什么解决方法(除了在DockPanel
的中心区域放置虚拟元素),或者你有任何其他建议,可以替代DockPanel
以实现相同的效果吗?谢谢。 - BorisHorizontalAlignment="Right"
的技巧解决了这个问题。非常感谢你的帮助。问题已解决! - Boris