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>
Есть ли простой способ сделать эту горизонтальную, а не вертикальную?
Основные требования решения:
- Элементы заполняются с помощью привязки данных
- Выбранный элемент изменяется просто щелчком пользователя.
Ответы
Ответ 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>