具有多列的 WPF ItemsControl

WPF ItemsControl with multiple columns

我有一个 ScrollViewer,里面有一个 ItemsControl。 ItemsControl 的 ItemSource 绑定到 ObservableCollection。

问题是它将所有内容默认为一栏。我希望根据 window 的大小,子项目将适应所有可用区域。

WrapPanel 可以。请看下图。在左侧,项目排列在 ItemsPanel 内,在右侧,它们排列在 WrapPanel 内。

但不幸的是 WrapPanel 没有 ItemSource 属性 所以我可以绑定我的项目。有没有办法让 ItemsSource 有更多列或将我的 ObservableCollection 绑定到 WrapPanel?

反其道而行之:保留 ItemsControl 并更改其面板模板以使用 WrapPanel 进行项目布局:

<ItemsControl ItemsSource="{Binding YourObservableCollection}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            ...
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

给包裹面板一个没有方向的宽度,你会自动每行有 2 个项目或 3.. 等等(玩每个项目的宽度)