2009-08-18 7 views
47

Próbuję napisać aplikację WPF do wyświetlania obrazów z zaznaczenia. Chcę wyświetlić wszystkie dostępne obrazy w baneru u góry okna i wyświetlić główny wybrany obraz w oknie głównym w celu dalszego przetwarzania.Listbox WPF, który rozkłada swoje elementy w poziomie

Jeśli chcę, aby lista na w lewo okna, wyświetlając obrazy w pionie, mogę to zrobić całkiem elegancko przy użyciu wiązania danych.

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

Czy istnieje prosty sposób, w jaki mogę zrobić to poziome zamiast pionowe? Główne wymagania rozwiązania jest:

  • Pozycje są wypełniane przy użyciu Databinding
  • Wybrana pozycja zostanie zmieniona przez użytkownika po prostu klikając go.
+0

Dlaczego nie ListView? – adatapost

Odpowiedz

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

Lub StackPanel z Orientacja = "Poziomo" – Nir

+2

StackPanel byłby lepszym rozwiązaniem, jak powiedział Nir. –

+1

Dzięki! Tak, lepszym rozwiązaniem jest stackPanel z orientacją poziomą. – adatapost

10

Domyślna ItemsPanel do kontroli ListBox jest VirtualizingStackPanel, więc jeśli chcesz normalny, domyślny doświadczenie dla kontroli, ale po prostu mieć to rozplanowany poziomo, powinieneś to określić (i zmienić orientację).

Przykład:

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