2

大量のデータ (200 以上の項目) を持つ ListView があるため、スペースを節約するために、UniformGrid を使用して 1 列ではなく 3 列を表示しています。

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

これは問題なく動作しますが、表示されるデータの長さの違いにより、ほとんどのデータが 1 行に収まるため、項目グループにはまだ無駄なスペースがありますが、2 行以上を占める項目がある場合もあります。これは、余分なスペースが必要な行が 1 行だけの場合でも、グループ内のすべての行が 2 行以上を占有することを意味します。

代替テキスト

これを修正する方法を知っている人はいますか、または均一グリッドを回避する別のアプローチを提案できますか? ありがとう!

4

1 に答える 1

5

垂直の WrapPanel を使用して、垂直スクロールを無効にすることができます。これにより、アイテムが列に表示され、Windows エクスプローラーのリスト ビューと同様に、右側に追加の列が追加されます。1 行の長いテキストで列全体を拡張したくない場合は、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 に答える