ListView(Metro)中的WrapPanel

时间:2012-09-05 14:16:27

标签: c# listview windows-runtime windows-store-apps winrt-xaml

我在Metro应用程序中有以下代码。列表视图绑定到对象列表。我的问题是WrapGrid为它们分配相等的宽度。但有些标题比其他标题长,所以宽度应设置为自动宽度。但这不起作用..任何人都有任何想法?

<ListView>
  <ListView.ItemTemplate>
      <DataTemplate>
      <StackPanel Orientation="Horizontal" >
              <TextBlock Text="{Binding Title}"/>
          </StackPanel>
      </DataTemplate>
  </ListView.ItemTemplate>
  <ListView.ItemsPanel>
      <ItemsPanelTemplate>
          <WrapGrid Orientation="Horizontal" />
      </ItemsPanelTemplate>
  </ListView.ItemsPanel>
</ListView>

2 个答案:

答案 0 :(得分:2)

这对我有用:

<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <WrapGrid ItemWidth="250" ItemHeight="80" MaximumRowsOrColumns="7" VerticalAlignment="Center" HorizontalAlignment="Center" />
    </ItemsPanelTemplate>
</ListView.ItemsPanel>

这里的关键点是MaximumRowsOrColumns属性。玩得开心:))

答案 1 :(得分:1)

我认为它不是WrapGrid,而是ListView本身通过ListViewItem / ItemContainerStyle使它们大小相同。我不认为确实有一个解决方法。您可以使用自己的ItemsControl和自定义面板或计算每个项目的所需大小,并根据该项目 - 将项目放在类似VariableSizedWrapGrid的内容中,相应地设置RowSpan / ColumnSpan以匹配所需的大小。除此之外 - 您可以将所有项目设置得足够宽以适应所有内容,或者只需剪切内容并在用户单击项目后在详细视图中显示完整字符串。