如何水平使用ListView来显示不同宽度的项目?

时间:2015-01-28 14:55:16

标签: wpf listview gridview stackpanel celltemplate

我有一个ListView,其ItemsSource是一个字符串集合。正如您所料,字符串的集合具有不同的长度。我的目标是在listView中水平显示这些字符串。

有很多水平使用ListView的例子,因此部分很容易。我通过将Horizo​​ntal StackPanel指定为ItemsPanelTemplate ...

来实现这一点

我的ListView xaml:

 <ListView x:Name="myListView">
  <ListView.ItemsPanel>
    <ItemsPanelTemplate>
      <StackPanel Orientation="Horizontal"/>
    </ItemsPanelTemplate>
  </ListView.ItemsPanel>
  <ListView.View>
    <GridView>
      <GridViewColumn>
        <GridViewColumn.CellTemplate>
          <DataTemplate>
            <StackPanel Orientation="Horizontal">
              <Button Click="Button_Click" FontSize="10" Foreground="Salmon"  BorderThickness="0" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" Content="x" Background="Transparent" />
              <Label FontSize="10" Foreground="SteelBlue" Content="{Binding}"/>
            </StackPanel>
          </DataTemplate>
        </GridViewColumn.CellTemplate>
      </GridViewColumn>
    </GridView>
  </ListView.View>
</ListView>

我想要展示的内容:

[This is a string] [This is also a string] [abc] [Look at me]

我的xaml显示的内容:

[This i] [This i] [abc   ] [Look a]

我可以为GridviewColumn设置一个宽度,并得到这样的结果:

[This is a string  ][This is also a string] [abc           ][Look at me        ]

我也可以将列宽设置为自动,这将使其与最宽的项目一样大......但我真的希望它能够节省空间并将它们并排放置在它们的真实宽度上。

我做了很多没有成功的研究,有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我不确定如何在ListView中实现这一点。但我尝试使用ListBox它运作良好。请参阅下面的代码。

<ListBox x:Name="myListView">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Button Click="Button_Click" FontSize="10" Foreground="Salmon"
                            BorderThickness="0" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" Content="x" Background="Transparent" />
                    <Label FontSize="10" Foreground="SteelBlue" Width="Auto" Content="{Binding}"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>