【问题标题】:WrapPanel doesn't wrap in WPF ListViewWrapPanel 不会在 WPF ListView 中换行
【发布时间】:2010-04-04 02:38:08
【问题描述】:

我正在使用带有 ItemTemplate 的 ListView,如下所示:

<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 资源管理器窗口那样填满屏幕。

我该怎么做?在我的版本中,它们只是垂直堆叠。


(来源:functionx.com

【问题讨论】:

  • 很高兴看到 Win98 屏幕.... :)

标签: c# .net wpf listview


【解决方案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/

【讨论】:

  • 我可能会补充一点,在这种情况下,您最好使用常规 ListBox 而不是 ListView。
  • 只是对此添加一点解释:ItemTemplate 指定应该如何呈现每个项目。它对项目的布局方式没有影响。相比之下,ItemsPanel确实指定布局。
  • 谢谢,我可以通过直接将 ItemsPanelTemplate 设置为我的 ItemTemplate 来做到这一点吗?就像我不想在这里粘贴我的 ItemTemplate 一样,否则它看起来更复杂。我如何才能像对 ItemTemplate 所做的那样设置对该 ItemTemplate 的引用,但对于 ItemsPanelTemplate 属性?
  • 我不确定我是否理解你,但是不,这两个模板用于不同的东西。阅读 itowlson 对这两个属性的用途的解释。
  • 对不起,属性是 ScrollViewer.Horizo​​ntalScrollBarVisibility - 更新了答案。
猜你喜欢
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多