WPF列表框模板水平与换行

本文关键字:水平 换行 列表 WPF | 更新日期: 2023-09-27 17:53:13

在我的WPF文档中,我有如下内容:

<ListBox x:Name="lbNames" Height="400" Width="400">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding Element[Icon].Value}" />
                <TextBlock Text="{Binding Element[Name].Value}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

但是我希望这个列表是水平的,如果没有足够的空间,我希望下一个项目在新的一行。最后,它应该看起来像一个网格。

可选:如果没有足够的垂直空间,我想要一个滚动条

WPF列表框模板水平与换行

您需要将项目面板更改为WrapPanel

<ListBox x:Name="lbNames" Height="400" Width="400" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListBox.ItemsPanel>
         <ItemsPanelTemplate>
              <WrapPanel/>
         </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding Element[Icon].Value}" />
                <TextBlock Text="{Binding Element[Name].Value}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

您所描述的是WrapPanel。这个元素将把你的TextBlock的网格格式,如果他们超过了WrapPanel的宽度,那么下一个元素将被强制到新的行。

要使列表水平,使用

Orientation="Horizontal" 
stackpanel

。对于垂直滚动条如果它超出了它应该达到的高度,使用

ScrollViewer.VerticalScrollBarVisibility="Visible".