WPF列表框模板水平与换行符

时间:2015-06-03 07:11:09

标签: c# .net wpf datatemplate

在我的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>

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

可选:如果垂直空间不足,我需要一个滚动条。

3 个答案:

答案 0 :(得分:2)

您需要将项目面板更改为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>

答案 1 :(得分:-1)

您所描述的是WrapPanel。此元素将以Text格式放置TextBlock,如果它们超过WrapPanel的宽度,则下一个元素将被强制转换为新行。

请参阅this教程。

答案 2 :(得分:-1)

要使列表水平,请使用

var x = document.getElementsByName("compare_name");  //Typo in **compare_name**
在stackpanel中

。对于垂直滚动条,如果它高于应有的值,请使用

Orientation="Horizontal"