WPF: ItemsPanelTemplate中的WrapPanel会扩展列表宽度

7

I have a listbox defined like this:

    <ListBox.ItemTemplate>
        <DataTemplate>
            <ItemsControl>
                <!-- Contents here -->
            </ItemsControl>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我的问题是:这个列表包含在网格控件中,应该使用其所包含的单元格中的所有可用空间,但不应强制父级分配更多的空间。但是一旦换行面板填满,它不会实际将项目包装到下一行(应该),而是扩展了列表框的宽度,并在此过程中强制调整父网格的大小。
如何使换行面板尊重其父级的大小,而不强制其扩展大小?
提前感谢!
编辑:还有一件事。我可以显式设置wrappanel的宽度以使其换行,但我希望wrappanel与listbox具有相同的大小。
4个回答

18

ScrollViewer.HorizontalScrollBarVisibility="Disabled"设置为禁用,WrapPanel就会自动换行。

<Grid>
    <ListBox
        ScrollViewer.HorizontalScrollBarVisibility="Disabled">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
    </ListBox>
</Grid>

很遗憾,那没起作用...我尝试过将其设置为隐藏和禁用,但它仍然扩展了它使用的空间。:(请注意,问题从来不是列表框变得比它所在的网格更大(因此会显示滚动条),问题是它所在的网格单元格被放大了,列表框也随之放大。 - Hallgeir
哦,还有一件事。网格包含在UniformGrid中,这可能是问题吗?也许UniformGrid没有包含网格,因此会扩展。 - Hallgeir
在你的问题中,你提到了wrappanel而不是uniformgrid。我的代码解决了你在关于wrappanels的问题中所解释的问题。如果你在listboxes中使用uniformgrid作为itemspanel也有问题,那么你应该写另一个问题。 - Wallstreet Programmer
我觉得你误解了我的意思... 这个问题是关于 Wrappanel 不换行的。 结构是这样的: UniformGrid->Grid->带有 Wrappanel 的 ListBox - Hallgeir

0
我已经解决了这个问题...问题可能是一些包含我的列表框的容器分配了过多的空间。无论如何,只要我移除了其他容器(包含我的列表)的滚动条,它就像预期的那样工作了。 :)
谢谢你的回复,它对解决这个问题非常有帮助。

-1

通常情况下,除非将水平滚动条禁用,否则它不会按照您预期的方式换行。现在您有一个真正实现换行的WrapPanel :)

ScrollViewer.HorizontalScrollBarVisibility="Disabled"

-2

我在设计模式(Blend和VS 2013)中遇到了这个问题,直到我在页面上添加了一些设计时大小设置后才解决了它:

d:DesignHeight="300" d:DesignWidth="600"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接