如何使 WPF ListView 项目水平重复,如水平滚动条?

Posted

技术标签:

【中文标题】如何使 WPF ListView 项目水平重复,如水平滚动条?【英文标题】:How do I make WPF ListView items repeat horizontally, like a horizontal scrollbar? 【发布时间】:2010-09-26 10:20:15 【问题描述】:

我有一个垂直重复数据的 WPF ListView。我不知道如何让它水平重复,就像 Windows 资源管理器中的幻灯片视图一样。我当前的 ListView 定义是:

<ListView ItemsSource="StaticResource MyDataList" ItemTemplate="StaticResource ListViewTemplate">
</ListView>

DataTemplate 是(尽管我认为这无关紧要);

                <Rectangle HorizontalAlignment="Stretch" Margin="0,1,0,0" x:Name="rectReflection" Width="Auto" Grid.Row="1" Height="30">
                    <Rectangle.Fill>
                        <VisualBrush Stretch="None" AlignmentX="Center" AlignmentY="Top" Visual="Binding ElementName=imgPhoto">
                            <VisualBrush.RelativeTransform>
                                <TransformGroup>
                                    <MatrixTransform Matrix="1,0,0,-1,0,0" />
                                    <TranslateTransform Y="1" />
                                </TransformGroup>
                            </VisualBrush.RelativeTransform>
                        </VisualBrush>
                    </Rectangle.Fill>
                    <Rectangle.OpacityMask>
                        <RadialGradientBrush GradientOrigin="0.5,1.041">
                            <RadialGradientBrush.RelativeTransform>
                                <TransformGroup>
                                    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.202" ScaleY="2.865"/>
                                    <SkewTransform AngleX="0" AngleY="0" CenterX="0.5" CenterY="0.5"/>
                                    <RotateTransform Angle="0" CenterX="0.5" CenterY="0.5"/>
                                    <TranslateTransform X="-0.002" Y="-0.491"/>
                                </TransformGroup>
                            </RadialGradientBrush.RelativeTransform>
                            <GradientStop Color="#D9000000" Offset="0"/>
                            <GradientStop Color="#01FFFFFF" Offset="0.8"/>
                        </RadialGradientBrush>
                    </Rectangle.OpacityMask>
                </Rectangle>
            </Grid>
        </Border>
    </DataTemplate>

【问题讨论】:

【参考方案1】:

将 ListView 的 ItemsPanel 设置为水平 StackPanel。像这样:

<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <StackPanel Orientation="Horizontal"></StackPanel>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>

【讨论】:

【参考方案2】:

也许更好的方法是使用 VirtualizingStackPanel,它具有所有相同的属性,但性能更高,尤其是对于包含大量项目的列表框。

【讨论】:

【参考方案3】:

我发现这条路更容易走

<ItemsControl ItemsSource="Binding Path=Steps">
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <TextBlock Text="Binding PageName" Padding="10" />
    </DataTemplate>
</ItemsControl.ItemTemplate>    
<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <WrapPanel></WrapPanel>
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

【讨论】:

但是 WrapPanel 有时会换行? 直到它到达右边界并再次从左到右作为新行

以上是关于如何使 WPF ListView 项目水平重复,如水平滚动条?的主要内容,如果未能解决你的问题,请参考以下文章

wpf中的listview如何改变GridViewColumn以及Title的水平对齐方式

具有多行的 WPF 水平 ListView

WPF绑定到Listview的Itemtemplate的可见性不起作用[重复]

如何使 WPF 文本框使用密码字符?

WPF:如何在拖动 ListView 项目时允许在 ListView 中使用鼠标滚轮滚动?

C# WPF:在高度属性设置为“自动”的 ListView 中防止水平滚动条覆盖最后一项