我有一个包含大量数据的ListView(200多个项目),所以为了节省空间,它使用UniformGrid显示3列而不是1
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="3" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
我还修改了样式,以便每个项目与顶部
对齐<ListView.Resources>
<Style TargetType="{x:Type ListView}">
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ListViewItem">
<Setter Property="VerticalContentAlignment" Value="Top"/>
</Style>
</Setter.Value>
</Setter>
</Style>
</ListView.Resources>
这样做没问题,但是由于显示的数据长度不同,项目组中仍然存在空间浪费,因为大多数数据都适合单行,但偶尔会有一个项目占用2个或更多行。这意味着当组中只有1行需要额外的空间
时,组中的所有行都会占用2行或更多行
有谁知道如何解决这个问题,还是可以建议另一种方法来避免统一网格?谢谢!
答案 0 :(得分:5)
您可以使用垂直WrapPanel并禁用垂直滚动。这将导致项目显示在列中,并在右侧添加了其他列,类似于Windows资源管理器中的列表视图。如果您不希望单行长文本扩展整个列,则可以在ListViewItems上设置Width或MaxWidth。
<ListView ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="MaxWidth" Value="100"/>
</Style>
</ListView.ItemContainerStyle>
如果禁用水平滚动,也可以使用普通的Horizontal WrapPanel,尽管除非元素是固定的宽度,否则可能对用户来说很尴尬。