2013-06-13 16 views
9

Mi piacerebbe creare una lista in WPF che visualizza i dati in più colonne, come Explorer visualizza un elenco di file in modalità di visualizzazione '' Icone piccole:WPF: listbox a più colonne/listview?

Multi-column list box

Ogni elemento deve essere rappresentato da un DataTemplate e lo scorrimento dovrebbe essere orizzontale. Come posso creare un elenco di questo tipo?

+0

Hai già controllare ItemsControl e itemscontrol.ItemsPanelTemplate per lo scorrimento orizzontale – blindmeis

+0

Sì, ho provato a fare questo, ma non ho trovato un modo per rendere gli elementi impilare fino a più colonne verticali . – Impworks

+0

uniformgrid o wrappanel possono fare questo – blindmeis

risposta

15

è necessario modificare ItemsPanel del ListBox per WrapPanel con verticale Orientation e disabilitare barra di scorrimento verticale sul ListBox Qualcosa di simile a questo:

<ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled" ItemsSource="{Binding=MyItems}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <!--my item template--> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel Orientation="Vertical"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 
+0

ottima implementazione - @ JSJ è bello, ma questo è bello avere senza le intestazioni della griglia – jharr100

5

provare qualcosa di simile qui di seguito.

<ListView ItemsSource="{Binding Files}" > 
      <ListView.ItemsPanel> 
       <ItemsPanelTemplate> 
        <WrapPanel Width="{Binding (FrameworkElement.ActualWidth), RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}" 
         ItemWidth="{Binding (ListView.View).ItemWidth, RelativeSource={RelativeSource AncestorType=ListView}}" 
         MinWidth="{Binding ItemWidth, RelativeSource={RelativeSource Self}}" 
         ItemHeight="{Binding (ListView.View).ItemHeight, RelativeSource={RelativeSource AncestorType=ListView}}" /> 
       </ItemsPanelTemplate> 
      </ListView.ItemsPanel> 
      <ListView.View> 
       <GridView > 
        <GridView.Columns> 
         <GridViewColumn DisplayMemberBinding="{Binding Name}" /> 
        </GridView.Columns> 
       </GridView> 
      </ListView.View> 
     </ListView> 

codice dietro il campione.

public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
      Files = new ObservableCollection<FileInfo>(); 
      var files = new System.IO.DirectoryInfo("C:\\Windows\\").GetFiles(); 
      foreach (var item in files) 
      { 
       Files.Add(item); 
      } 
      this.DataContext = this; 
     } 

     public ObservableCollection<FileInfo> Files { get; set; } 
    } 
5

provare qualcosa come di seguito.

<ListBox> 
<ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
    <UniformGrid Columns="3"/> 
    </ItemsPanelTemplate> 
</ListBox.ItemsPanel> 

<DataTemplate> 
     <!--my item template--> 
</DataTemplate> 
</ListBox> 

possono utilizzare this collegamento

Problemi correlati