2009-08-18 12 views
47

Estoy tratando de escribir una aplicación WPF para mostrar imágenes de una selección. Quiero mostrar todas las imágenes disponibles en un banner en la parte superior de la ventana, y mostrar la imagen principal seleccionada en la ventana principal para su posterior procesamiento.WPF ListBox que establece sus elementos horizontalmente

Si quería la lista en el Izquierda de la ventana, mostrando las imágenes verticalmente, puedo hacerlo de forma bastante elegante utilizando databinding.

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

¿Hay alguna manera directa de hacerlo horizontal en lugar de vertical? Los principales requisitos de una solución es:

  • Los artículos se rellenan usando enlace de datos
  • El elemento seleccionado se cambia simplemente por el usuario haciendo clic en él.
+0

Por qué no listview? – adatapost

Respuesta

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

O StackPanel con Orientation = "Horizontal" – Nir

+2

StackPanel sería la mejor solución aquí como dijo Nir. –

+1

Gracias! Sí, stackPanel con orientación horizontal es la mejor opción. – adatapost

10

El valor predeterminado ItemsPanel para el control ListBox es una VirtualizingStackPanel, por lo que si desea que el, la experiencia normal predeterminado para el control, pero sólo tenerlo distribuidas de forma horizontal, debe especificar esto (y cambiar la orientación).

Ejemplo:

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