Элементы списка WPF XAML WrapPanel в строке

Я вынужден просить о помощи, в то время как я не могу понять это сам. Я работаю над настольным приложением WPF-XAML, в котором GUI в основном генерируется динамически.

мой запрос касается стиля WrapPanel с элементами ListBox.

пожалуйста, найдите фрагмент кода из моего usercontrol (.XAML-код):

<DockPanel x:Name="xResultPanel">
  <ListView x:Name="bResultPanel" ItemsSource="{Binding ResultList, UpdateSourceTrigger=PropertyChanged}">
    <ListView.ItemTemplate>
      <DataTemplate>
        <Expander Header="{Binding GroupName}" Style="{DynamicResource FeatureExpander2}">
          <WrapPanel ItemWidth="140" Orientation="Horizontal">
            <ListBox x:Name="ListOfTiles" ItemsSource="{Binding VideoSamples}">
              <ListBox.ItemTemplate>
                <DataTemplate>
                  <StackPanel Width="120" Margin="10" HorizontalAlignment="Left">
                     <Image />
                     <TextBlock />
                  </StackPanel
                </DataTemplate>
              </ListBox.ItemTemplate>
            </ListBox>
          </WrapPanel>
        </Expander>
      </DataTemplate>
    </ListView.ItemTemplate>
  </ListView>
</DockPanel>

выше код возвращает элементы списка, представленные не в строке, но каждый элемент в новой строке. Я попытался установить MinWidth, Ширина etc для WrapPanel и ListBox, но без результата.

заранее спасибо за все связанные советы, как заставить WrapPanel заполнять его содержимое по горизонтали.

1 ответов


проблема в том, что ваш WrapPanel имеет только одного ребенка:ListBox. Это означает, что верстка делается ItemsPanel шаблон ListBox.

попробуйте это вместо этого:

   <Expander Header="{Binding GroupName}" Style="{DynamicResource FeatureExpander2}">
      <ListBox x:Name="ListOfTiles" ItemsSource="{Binding VideoSamples}">
        <ListBox.ItemTemplate>
          <DataTemplate>
            <StackPanel Width="120" Margin="10" HorizontalAlignment="Left">
              <Image />
              <TextBlock />
            </StackPanel>
          </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.ItemsPanel>
          <ItemsPanelTemplate>
            <WrapPanel />
          </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
      </ListBox>
    </Expander>