我想为我的ListBox
指定多个列,但我的谷歌搜索技巧在这个上失败了。
如何修改ItemsPanelTemplate
的{{1}}以自定义显示的列?
编辑:忘了把我已经尝试过的东西
我已经尝试了代码
ListBox
除了丢失垂直滚动条
之外哪个有效答案 0 :(得分:0)
它不是那么困难,但它取决于 - 如果你对每个项目使用网格或某种控制,你不介意列不是宽度相同的宽度项目,那么只是将一个网格添加到ItemTemplate即可。
<ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition>
<ColumnDefinition>
<ColumnDefinition>
</Grid.ColumnDefinitions>
<SomeControl Grid.Column="0" />
<SomeControl Grid.Column="1" />
<SomeControl Grid.Column="2" />
</Grid>
</DataTemplate>
</ItemTemplate>
唯一的问题是,如果您希望网格列的大小与可变大小的内容相同 - 在这种情况下,它会更复杂一些 - 否则您可以显式设置大小,或让内容决定通过将列宽设置为"Auto"
来确定大小。
答案 1 :(得分:0)
以下是我认为您正在寻找的一个简单示例,包括3列,项目换行和自动垂直滚动,它们将根据周围的布局而有效。
<ListBox HorizontalContentAlignment="Stretch">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="3"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Border MinHeight="150" Margin="5" Background="Green" CornerRadius="4">
<TextBlock Text="{Binding}" Foreground="White"/>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
<System:String>One</System:String>
<System:String>Two</System:String>
<System:String>Three</System:String>
<System:String>Four</System:String>
<System:String>Five</System:String>
<System:String>Six</System:String>
<System:String>Seven</System:String>
<System:String>Eight</System:String>
<System:String>Nine</System:String>
<System:String>Ten</System:String>
</ListBox>