7

我被迫寻求帮助,而我自己却无法弄清楚。我正在开发 WPF-XAML 桌面应用程序,其中 GUI 主要是动态生成的。

我的查询涉及带有 ListBox 项的 WrapPanel 样式。

请从我的用户控件(.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>

上面的代码返回不是连续显示的 ListBox 项目,而是新行中的每个项目。 我尝试为 WrapPanel 和 ListBox 设置 MinWidth、Width 等,但没有结果。

提前感谢所有相关提示如何强制 WrapPanel 水平填充其内容。

4

1 回答 1

12

问题是您WrapPanel只有一个孩子:ListBox. 这意味着布局是ItemsPanelListBox.

试试这个:

   <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>
于 2013-06-03T12:03:25.667 回答