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

时间:2010-07-02 12:21:02

标签: wpf size parent wrappanel

我有一个像这样定义的列表框:

                                                            

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

我的问题是:此列表包含在网格控件中,并应使用其包含的该单元格的所有可用空间,但不应强制父级分配更多空间。但是,一旦填充面板填满,而不是实际将项目包装到下一行(应该如此),它只会扩展列表框的宽度,并在此过程中强制父网格也调整大小。

如何让wrap panel尊重其父级的大小,而不是强制它扩展它的大小?

提前致谢!

编辑:还有一件事。我可以显式设置wrappanel的宽度以使其换行,但我希望wrappanel与listbox具有相同的大小。

4 个答案:

答案 0 :(得分:17)

设置ScrollViewer.HorizontalScrollBarVisibility="Disabled"WrapPanel将换行。

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

答案 1 :(得分:0)

我已经解决了问题..问题是(可能)包含我的列表框的一些容器有点过于慷慨,为我的列表框分配空间。 在任何情况下,只要我删除其余容器(包含我的列表)的滚动条,它就会按预期工作。 :)

感谢您的回复,这对解决这个问题非常有帮助。

答案 2 :(得分:0)

我在设计模式(Blend和VS 2013)中处理这个问题,直到我在页面上添加了一些设计时间,它才进行换行:

d:DesignHeight = “300”   d:DesignWidth = “600”

答案 3 :(得分:0)

通常,在将“水平”滚动条设置为“禁用”之前,它不会按预期换行。现在你有一个实际包裹的包装:)“

ScrollViewer.HorizontalScrollBarVisibility="Disabled"