2

我有一个包含大量数据(200 多个项目)的 ListView,因此为了节省空间,它使用 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 行或更多行

替代文字

有谁知道如何解决这个问题,或者可以提出另一种避免统一网格的方法?谢谢!

4

1 回答 1

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>

如果您禁用水平滚动,您也可以使用普通的 Horizo​​ntal WrapPanel,但除非元素是固定宽度的,否则用户可能会感到尴尬。

于 2010-09-08T03:23:04.430 回答