2009-08-18 9 views
47

Ich versuche, eine WPF-Anwendung zum Anzeigen von Bildern aus einer Auswahl zu schreiben. Ich möchte alle verfügbaren Bilder in einem Banner am oberen Rand des Fensters anzeigen und das ausgewählte Hauptbild im Hauptfenster zur weiteren Bearbeitung anzeigen.WPF ListBox, die ihre Elemente horizontal auslegt

Wenn ich die Liste auf der Left des Fensters, die Bilder vertikal anzeigen möchten, kann ich dies ziemlich elegant mit Databinding tun.

<ListBox 
     Name="m_listBox" 
     IsSynchronizedWithCurrentItem="True" 
     ItemsSource="{Binding}"    
     > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Image Source="{Binding}" Width="60" Stretch="Uniform" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Gibt es eine direkte Möglichkeit, die ich horizontal statt vertikal machen kann? Die wichtigsten Anforderungen an eine Lösung ist:

  • Die Elemente gefüllt werden mit Databinding
  • Das ausgewählte Element einfach durch den Benutzer geändert wird, klicken sie.
+0

Warum nicht Listview? – adatapost

Antwort

101

WrapPanel

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel IsItemsHost="True" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBoxItem>listbox item 1</ListBoxItem> 
    <ListBoxItem>listbox item 2</ListBoxItem> 
    <ListBoxItem>listbox item 3</ListBoxItem> 
    <ListBoxItem>listbox item 4</ListBoxItem> 
    <ListBoxItem>listbox item 5</ListBoxItem> 
</ListBox> 

WPF Tutorial

+37

Oder StackPanel mit Orientation = "Horizontal" – Nir

+2

StackPanel wäre hier die bessere Lösung, wie Nir sagte. –

+1

Danke! Ja, StackPanel mit horizontaler Ausrichtung ist die bessere Option. – adatapost

10

Der Standard ItemsPanel für die ListBox Steuerelement ist ein VirtualizingStackPanel, wenn Sie also die normale, Standard Erfahrung wollen für die Kontrolle, aber haben es nur horizontal angelegt, Sie sollten dies angeben (und die Ausrichtung ändern).

Beispiel:

<ListBox> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizingStackPanel IsItemsHost="True" Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox>