0

堆栈面板不合作。我们有一个固定的宽度,以及从左到右排列的可变数量的项目。

我们有一个项目控件,它使用堆栈面板来布置它们:

<ItemsControl x:Name="testItems"
              HorizontalAlignment="Left"
              VerticalAlignment="Top">
    <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Stacktest:ItemControl />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

但这并不能正确调整项目的大小。无论有多少可用空间,它们的大小始终相同。如果项目太多,它们会在右侧被切断,而不是调整大小以使它们都适合。知道如何做到这一点吗?如果项目的数量是恒定的,我会使用网格,但事实并非如此。它通常是 1-4 项。

如果 ItemsPanelTemplate 可以是具有可变列数的网格,那就太好了。但我不知道在 ItemsPanelTemplate 中是否可能(或具有相同结果的东西)。

答案是编写一个特殊的面板子类,为包含的项目分配相等的宽度吗?

4

2 回答 2

1

我认为你想要的是 UniformGrid。您可以指示它只有一行,并且应该将里面的所有项目布局为具有相同的宽度。这可能不是您正在寻找的,但这是我能想到的最接近的。

我不确定 Silverlight Toolkit 是否提供这样的组件,但我已经看到了展示如何构建一个组件的帖子。

例如, Jeff Wilcox 的博客就有一个。

于 2009-03-16T18:05:40.290 回答
1

我可能有点老派,但我喜欢自己做这种事情。您可以在后端编写一些代码以在空间中放置动态数量的项目(使用网格),并使它们具有动态宽度并均匀分布。

这可能会按照您想要的方式工作,并且可以调整。

于 2009-03-16T18:29:33.680 回答