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

WrapPanel не переносит в WPF ListView

Я использую ListView с ItemTemplate, как это:

<Window.Resources>
    <DataTemplate x:Key="ItemTemplate">
        <WrapPanel Orientation="Horizontal">
            <Image Width="50" Height="50" Stretch="Fill" Source="{Binding Cover}"/>
            <Label Content="{Binding Title}" />
        </WrapPanel>
    </DataTemplate>
</Window.Resources>

Но обложки не заполняют экран, как окна Windows Explorer.

Как мне это сделать? Они просто сложены вертикально в моей версии.

alt text
(источник: functionx.com)

4b9b3361

Ответ 1

Попробуйте использовать WrapPanel в качестве панели элементов списка ListView и отключите горизонтальную полосу прокрутки:

<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled">
  <ListView.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel Orientation="Horizontal" />
    </ItemsPanelTemplate>
  </ListView.ItemsPanel>
  ...
</ListView>

Обновление: itowlson предлагает это объяснение, чтобы сделать вещи более ясными: ItemTemplate указывает, как каждый элемент должен быть визуализирован. Это не влияет на то, как выкладываются элементы. ItemsPanel, напротив, определяет макет.

Кроме того, вы можете захотеть, чтобы все элементы отображались одинакового размера. Вы можете узнать, как это сделать из этой статьи: http://joshsmithonwpf.wordpress.com/2008/09/06/synchronizing-the-width-of-elements-in-an-itemscontrol/