WPF:多列列表框/列表视图?

时间:2013-06-13 12:56:30

标签: wpf list listview

我想在WPF中创建一个列表,在多个列中显示数据,例如Explorer在“小图标”视图模式下显示文件列表:

Multi-column list box

每个项目必须由DataTemplate表示,滚动应该是水平的。我如何制作这样的清单?

3 个答案:

答案 0 :(得分:17)

您需要将ItemsPanel的{​​{1}}更改为ListBoxWrapPanel,并在Orientation上停用垂直滚动条 像这样:

ListBox

答案 1 :(得分:6)

尝试类似下面的内容。

<ListBox>
 <ListBox.ItemsPanel>
  <ItemsPanelTemplate>
   <UniformGrid Columns="3"/>
  </ItemsPanelTemplate>
 </ListBox.ItemsPanel>

 <DataTemplate>
      <!--my item template-->
 </DataTemplate>
</ListBox>

可以使用this链接

答案 2 :(得分:5)

尝试类似下面的内容。

<ListView ItemsSource="{Binding Files}" >
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Width="{Binding (FrameworkElement.ActualWidth), RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}"
                       ItemWidth="{Binding (ListView.View).ItemWidth, RelativeSource={RelativeSource AncestorType=ListView}}"
                       MinWidth="{Binding ItemWidth, RelativeSource={RelativeSource Self}}"
                       ItemHeight="{Binding (ListView.View).ItemHeight, RelativeSource={RelativeSource AncestorType=ListView}}" />
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
            <ListView.View>
                <GridView >
                    <GridView.Columns>
                        <GridViewColumn DisplayMemberBinding="{Binding Name}" />
                    </GridView.Columns>
                </GridView>
            </ListView.View>
        </ListView>

示例背后的代码。

 public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            Files = new ObservableCollection<FileInfo>();
            var files = new System.IO.DirectoryInfo("C:\\Windows\\").GetFiles();
            foreach (var item in files)
            {
                Files.Add(item);
            }
            this.DataContext = this;
        }

        public ObservableCollection<FileInfo> Files { get; set; }
    }