C#WPF限制Listview中每行的项目

时间:2010-12-23 21:11:56

标签: c# wpf xaml listview

我的列表视图:

<ListView ItemTemplate="{StaticResource GridViewItemTemplate}" Name="gridView_movies">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"  VerticalAlignment="Top"/>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
</ListView>

列表的数据模板:

<DataTemplate x:Key="GridViewItemTemplate">
    <StackPanel Orientation="Vertical" >
        <Image Width="250" Height="290" Source="{Binding Image}"/>
        <TextBlock Text="{Binding Title}" HorizontalAlignment="Center"  VerticalAlignment="Top" FontSize="20"/>
    </StackPanel>
</DataTemplate>

当我加载它时,所有项目都显示在一行中,我的问题是,我如何每行只显示3个项目而不是一行中的所有项目。

感谢您的关注。

3 个答案:

答案 0 :(得分:10)

使用

<UniformGrid Columns="3" .../>

而不是<StackPanel Orientation="Horizontal" .../>

中的ItemsPanelTemplate

答案 1 :(得分:1)

使用WrapPanel代替StackPanel。它不允许您直接指定每行的项目数,但您可以设置每个项目的宽度,这几乎一样好。如果一行上没有剩余空间,则会在下一行继续。

编辑:您也可以使用Bonial建议的UniformGrid。缺点是,如果您可以调整UI的大小并使ListView更宽,则每行的项目数不会改变,并且它们将被拉伸以填充空间。根据您的需要,它可能没问题,但我认为WrapPanel在大多数情况下是更好的选择。

答案 2 :(得分:1)

您想要用WrapPanel替换ListView.ItemsPanel StackPanel。它将完成工作。一旦WrapPanel有一个宽度,它就会对这些项进行换行。