2008-12-11 1 views
53

У меня есть ListView WPF, который повторяет данные по вертикали. Я не могу понять, как сделать его повторяющимся по горизонтали, например, представление слайд-шоу в Проводнике Windows. Мое текущее определение ListView является:Как сделать элементы WPF 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> 

ответ

163

Установите ItemsPanel из ListView в горизонтальная StackPanel. Как это:

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

Возможно, лучший способ сделать это было бы использовать VirtualizingStackPanel, который имеет все те же свойства, но гораздо более производительным, особенно для ListBoxes с большим количеством элементов.

2

Мне было легче идти по этому пути

<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

Но WrapPanel бы завернуть когда-нибудь? – 2016-11-25 18:07:49

Смежные вопросы