2009-08-18 5 views
47

J'essaye d'écrire une application WPF pour afficher des images à partir d'une sélection. Je souhaite afficher toutes les images disponibles dans une bannière en haut de la fenêtre et afficher l'image principale sélectionnée dans la fenêtre principale pour un traitement ultérieur.WPF ListBox qui dispose ses éléments horizontalement

Si je voulais la liste sur le gauche de la fenêtre, en affichant les images verticalement, je peux le faire assez élégamment en utilisant la liaison de données.

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

Y a-t-il un moyen simple de rendre cet élément horizontal plutôt que vertical? Les principales exigences d'une solution est:

  • Les articles sont renseignés grâce à Databinding
  • L'élément sélectionné est modifié simplement par l'utilisateur cliquant dessus.
+0

Pourquoi ne pas listview? – adatapost

Répondre

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

Ou StackPanel avec Orientation = "Horizontal" – Nir

+2

StackPanel serait la meilleure solution ici, comme l'a dit Nir. –

+1

Merci! Oui, stackPanel avec l'orientation horizontale est une meilleure option. – adatapost

10

La valeur par défaut ItemsPanel pour le contrôle ListBox est un VirtualizingStackPanel, donc si vous voulez que la normale, l'expérience par défaut pour le contrôle, mais ont simplement posé horizontalement, vous devriez le spécifier (et changer l'orientation).

Exemple:

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