2008-12-11 4 views
53

Ich habe eine WPF ListView, die die Daten vertikal wiederholt. Ich kann nicht herausfinden, wie man es horizontal wiederholt, wie die Diashow-Ansicht im Windows Explorer. Meine aktuelle Listview-Definition ist:Wie kann ich WPF-ListView-Elemente horizontal wie eine horizontale Bildlaufleiste wiederholen?

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

Die Datatemplate ist (obwohl ich glaube, das sollte keine Rolle spielen);

   <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> 

Antwort

163

Stellen Sie die Itemspanel des Listview ein horizontales StackPanel. Wie folgt aus:

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

Vielleicht ein besserer Weg, dies zu tun, wäre ein VirtualizingStackPanel zu verwenden, die alle die gleichen Eigenschaften hat, aber viel leistungsfähigere besonders für Listboxen mit sehr vielen Posten.

2

Ich fand es einfacher

diesen Weg gehen
<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> 

+0

Aber ein WrapPanel würde irgendwann wickeln? –

+0

bis zum rechten Rand und geht als neue Zeile von links nach rechts wieder – stenly

Verwandte Themen