【问题标题】:How do I make WPF ListView items repeat horizontally AND vertically?如何使 WPF ListView 项目水平和垂直重复?
【发布时间】:2023-03-05 11:57:01
【问题描述】:

我有一个ListView,我想在其中水平显示内容。这很好用,但现在我需要让它们像 Windows 资源管理器类型一样显示。

例如:

A   B   C

D   E   F

G   H   I

A   B

C   D

E   F

G   H

I

可以在ListView 中使用吗?

【问题讨论】:

    标签: wpf templates xaml listview


    【解决方案1】:

    如果您希望您的商品都具有相同的尺寸,我会选择UniformGrid。它是那些被忽视的控件之一,在这种情况下可能非常有用。

    这就是我制作快速而肮脏的工具栏的方式:

    <ItemsControl ItemsSource="{Binding}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Button Command="{Binding}"
                        ToolTip="{Binding Tooltip}">
                    <StackPanel Orientation="Vertical">
                        <Image Height="16"
                               Width="16"
                               RenderOptions.BitmapScalingMode="NearestNeighbor"
                               Source="{Binding Image}"
                               HorizontalAlignment="Center" />
                    </StackPanel>
                </Button>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Rows="1" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
    

    【讨论】:

    • 酷。那行得通。但是,我已经更改为两个列表视图,因为它相当紧急。不过,我会记住统一网格,因为我的测试是相当有结论的。
    【解决方案2】:

    听起来您正在寻找 WrapPanel。我认为它不适用于 ListView,但如果您希望通用项目容器使用 WrapPanel 作为其布局,您可以使用 ItemsControl 执行此操作并用您想要的任何元素填充它。类似于以下内容:

    <ItemsControl>
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.Items>
            <TextBlock Margin="20" Padding="20" Text="Blah" Background="#999" />
            <TextBlock Margin="20" Padding="20" Text="Blah" Background="#999" />
            <TextBlock Margin="20" Padding="20" Text="Blah" Background="#999" />
            <TextBlock Margin="20" Padding="20" Text="Blah" Background="#999" />
            <TextBlock Margin="20" Padding="20" Text="Blah" Background="#999" />
            <TextBlock Margin="20" Padding="20" Text="Blah" Background="#999" />
        </ItemsControl.Items>
    </ItemsControl>
    

    【讨论】:

    • 就像你说的,它似乎不适用于 WrapPanel,但我要做的是有两个相互重叠的列表,因为我知道我将拥有的最大项目的确切数量.
    • 你可以让它与 ListView 一起工作。我已经完成了,但目前手头没有代码。做一些谷歌搜索,你会找到的。
    • “必须”成为 ListView 吗? WPF 非常灵活,您可以从许多不同的容器中获得许多相同的列表显示功能。容器通常不是您要查找的功能,而是模板(ItemsTemplate、ItemsPanelTemplate)。
    猜你喜欢
    • 2010-09-26
    • 2011-08-12
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 2014-07-06
    • 2018-11-19
    • 2014-07-11
    • 2012-05-11
    相关资源
    最近更新 更多