Подтвердить что ты не робот

WPF ListBox, который излагает свои позиции по горизонтали

Я пытаюсь написать приложение WPF для отображения изображений из выделения. Я хочу отобразить все доступные изображения в баннере в верхней части окна и отобразить главное выбранное изображение в главном окне для дальнейшей обработки.

Если мне нужен список в Влево окна, отображая изображения по вертикали, я могу сделать это довольно элегантно, используя привязку данных.

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

Есть ли простой способ сделать эту горизонтальную, а не вертикальную? Основные требования решения:

  • Элементы заполняются с помощью привязки данных
  • Выбранный элемент изменяется просто щелчком пользователя.
4b9b3361

Ответ 1

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

Ответ 2

По умолчанию ItemsPanel для элемента управления ListBox есть VirtualizingStackPanel, поэтому, если вы хотите, чтобы обычный элемент управления по умолчанию использовался для управления, но просто он был выложен горизонтально, вы должны указать это (и изменить ориентацию).

Пример:

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