WPF ListBox qui affiche ses articles horizontalement

j'essaie d'écrire une application WPF pour afficher des images d'une sélection. Je veux afficher toutes les images disponibles dans une bannière en haut de la fenêtre, et l'affichage principal de l'image sélectionnée dans la fenêtre principale pour la poursuite du traitement.

si je voulais la liste sur le gauche de la fenêtre, affichant les images verticalement, je peux le faire très élégamment en utilisant la reliure 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>

est - il un de façon simple, je peux faire ça horizontal au lieu de vertical? Les principales exigences d'une solution est:

  • Les éléments sont remplis à l'aide de la liaison de données
  • L'élément sélectionné est modifié simplement par l'utilisateur en cliquant sur elle.
48
demandé sur Andrew Shepherd 2009-08-18 12:19:18

2 réponses

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 Tutoriel

107
répondu adatapost 2017-05-23 12:18:01

la valeur par défaut ItemsPanel pour la commande ListBox est une VirtualizingStackPanel , donc si vous voulez l'expérience normale par défaut pour la commande mais qu'elle soit juste étalée horizontalement, vous devez spécifier ceci (et changer l'orientation).

exemple:

<ListBox>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel IsItemsHost="True" Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>
14
répondu Bob Sammers 2016-11-22 17:07:46