You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF ListBox实现每行3列(含图片与文本)布局的问题

WPF ListBox实现每行3列(含图片与文本)布局的问题

嘿,我看你现在卡在ListBox的横向布局上了——想让每行放3个带图片和文本的项,但不管怎么调,ListBox里的项还是竖着排,只有Item内部的StackPanel是水平的?这问题我之前也碰到过,核心是你找错了布局的位置~

你当前代码里的问题在于:UniformGrid被放在了ItemTemplate里,这只会影响单个Item内部的布局,而ListBox默认的ItemsPanel是垂直方向的StackPanel,所以所有Item还是会从上到下挨个排列。要实现每行3列的效果,得把UniformGrid放到ItemsPanel里,用来控制所有Item的排列方式。

给你个调整后的完整代码示例:

<ListBox Name="lsbox" 
         ScrollViewer.HorizontalScrollBarVisibility="Disabled"
         ItemsSource="{Binding Cards}"
         SelectedItem="{Binding SelectedItem}">
    <!-- 替换默认的ItemsPanel为UniformGrid,设置每行3列 -->
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="3" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <!-- 每个Item内部的布局,这里改成垂直排列文本+图片更合理,你也可以根据需求调Orientation -->
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical" Margin="10" HorizontalAlignment="Center">
                <TextBlock Margin="3" Text="{Binding Name}" HorizontalAlignment="Center"/>
                <Image Width="200" Height="300" Margin="5" Source="{Binding Path}"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我给你拆解下关键改动:

  • 新增了ListBox.ItemsPanel部分,用UniformGrid作为所有Item的容器,设置Columns="3"就会自动把Item按每行3个排列,超出后自动换行。
  • 调整了ItemTemplate里的StackPanel为垂直方向,这样每个Item里的文本在图片上方,看起来更规整,你要是还是想水平排列也可以改回Orientation="Horizontal"。
  • 去掉了你原来放在ItemTemplate里的UniformGrid,那个位置放它起不到全局布局的作用。

另外补充个小细节:如果你的Item数量不是3的倍数,UniformGrid会自动把最后一行的项居中对齐(默认行为),要是你想让它们左对齐,可以给UniformGrid加HorizontalAlignment="Left"。

备注:内容来源于stack exchange,提问作者Robin Harz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:48:13