如何自定义ListBox的ItemsPanelTemplate的布局?

时间:2012-07-11 15:49:22

标签: wpf expression-blend itemspaneltemplate

我想为我的ListBox指定多个列,但我的谷歌搜索技巧在这个上失败了。

如何修改ItemsPanelTemplate的{​​{1}}以自定义显示的列?

编辑:忘了把我已经尝试过的东西

我已经尝试了代码

ListBox

除了丢失垂直滚动条

之外哪个有效

2 个答案:

答案 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>