Wpf 具有行中对象限制的项目框(Windows资源管理器中的大图标视图样式)

Wpf 具有行中对象限制的项目框(Windows资源管理器中的大图标视图样式),wpf,xaml,Wpf,Xaml,找不到解决非常简单的UI问题的解决方案: 我有一个带有图像属性的模型。Images属性保存图像项的集合。 现在-我有一个ListBox,并将ListBoxItem数据模板绑定到Images.Image,一切都很好。但我有一个新的行每一项。不太好。 我愿意实现的是,让我们描述为,一个列表框,具有水平项目方向和一行中项目的限制。就像Windows资源管理器中的大图标视图样式一样。 以前有人实施过这样的解决方案吗?如有任何建议,我们将不胜感激。 提前感谢。使用包装面板(或其他适当的面板)作为列表框的项


找不到解决非常简单的UI问题的解决方案:
我有一个带有图像属性的模型。Images属性保存图像项的集合。
现在-我有一个ListBox,并将ListBoxItem数据模板绑定到Images.Image,一切都很好。但我有一个新的行每一项。不太好。
我愿意实现的是,让我们描述为,一个列表框,具有水平项目方向和一行中项目的限制。就像Windows资源管理器中的大图标视图样式一样。
以前有人实施过这样的解决方案吗?如有任何建议,我们将不胜感激。

提前感谢。

使用
包装面板(或其他适当的面板)作为列表框的
项目面板,并禁用水平滚动:

<ListBox ItemsSource="{Binding Images}"
         ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Image Source="{Binding}" Width="100" Margin="5"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

使用
WrapPanel
(或其他适当的面板)作为列表框的
ItemsPanel
,并禁用水平滚动:

<ListBox ItemsSource="{Binding Images}"
         ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Image Source="{Binding}" Width="100" Margin="5"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>


你可以将
列表框的
项目面板模板设置为
包装面板
,比如。

你可以将
列表框的
项目面板模板设置为
包装面板
,比如。

我不确定为什么总是这样-但我一问,我找到了使用ListView的替代解决方案:

           <ListView ItemsSource="{Binding Images}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                            <Image Source="{Binding Image}" />
                    </DataTemplate>
                </ListView.ItemTemplate>
                <ListView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <UniformGrid Columns="2" />
                    </ItemsPanelTemplate>
                </ListView.ItemsPanel>
            </ListView>

我不知道为什么总是这样-但我一问,就找到了一个使用ListView的替代解决方案:

           <ListView ItemsSource="{Binding Images}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                            <Image Source="{Binding Image}" />
                    </DataTemplate>
                </ListView.ItemTemplate>
                <ListView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <UniformGrid Columns="2" />
                    </ItemsPanelTemplate>
                </ListView.ItemsPanel>
            </ListView>


这与列表框的工作原理完全相同。你不必因为使用不同的面板而禁用水平滚动。同意,但我发布了另一种解决方案,因为它们适合不同的情况。使用包装器-项目将移动到下一行,这取决于是否有“最后一项”的位置(如果我错了,请纠正我)。在我的方法中,我使用UniformGrid设置-我希望在一行上看到多少项。当然,这就是为什么可以在ItemsControl中设置ItemsPanel的原因。这正是我在回答“WrapPanel(或其他合适的小组)”时所指的。都是真的-谢谢你的解释和帮助。干杯。这与列表框的工作原理完全相同。你不必因为使用不同的面板而禁用水平滚动。同意,但我发布了另一种解决方案,因为它们适合不同的情况。使用包装器-项目将移动到下一行,这取决于是否有“最后一项”的位置(如果我错了,请纠正我)。在我的方法中,我使用UniformGrid设置-我希望在一行上看到多少项。当然,这就是为什么可以在ItemsControl中设置ItemsPanel的原因。这正是我在回答“WrapPanel(或其他合适的小组)”时所指的。都是真的-谢谢你的解释和帮助。干杯