Лучший подход для просмотра списка из нескольких столбцов WPF - PullRequest
2 голосов
/ 08 сентября 2010

У меня есть 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 или более строк.Это означает, что все строки в группе занимают 2 или более строк, когда только 1 строке требуется дополнительное пространство

alt text

Кто-нибудь знает, как это исправить, или может предложить другойподход, чтобы избежать единой сетки?Спасибо!

1 Ответ

5 голосов
/ 08 сентября 2010

Вы можете использовать вертикальную WrapPanel и отключить вертикальную прокрутку.Это приведет к тому, что элементы появятся в столбцах с дополнительными столбцами, добавленными справа, аналогично представлению списка в проводнике Windows.Вы можете установить Width или MaxWidth в ListViewItems, если вы не хотите, чтобы одна строка длинного текста расширяла весь столбец.

<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>

Вы также можете использовать обычную горизонтальную оберточную панель, если отключите горизонтальную прокрутку, хотя, если элементы не имеют фиксированной ширины, это, вероятно, будет неудобно для пользователя.

...