【问题标题】:Best approach for WPF multi-column list viewWPF 多列列表视图的最佳方法
【发布时间】:2010-09-08 11:23:04
【问题描述】:

我有一个包含大量数据(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 行或更多行

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

【问题讨论】:

    标签: wpf listview uniformgrid


    【解决方案1】:

    您可以使用垂直 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,但除非元素是固定宽度的,否则可能会让用户感到尴尬。

    【讨论】:

    • 感谢 Quartermeister,我尝试了您的方法,但它只创建了一个列,而不是 3 个?
    • @Si:这种方法将从单列开始并随着元素数量的增加而添加更多列,而不是像您的那样从单行开始并添加更多行,所以如果你有很少的足够的元素,那么只有一列。您是否将它放在允许垂直滚动的面板中?它只会在垂直空间用完时创建额外的列,这就是我禁用 ListView 上的垂直滚动条的原因,但如果 ListView 本身位于 ScrollViewer 中,那么它可能仍会垂直扩展。
    • 干杯 Quartermesiter,这解释了它!
    • @Quartermeister 这正是我想要的!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多