C# UniformGrid如何在无限大的情况下工作

C# UniformGrid如何在无限大的情况下工作,c#,.net,wpf,listbox,panel,C#,.net,Wpf,Listbox,Panel,例如,我们有一个带有UnidormGrid的ListBox,就像ListBoxPanel一样 <ListBox> <ListBox.ItemsPanel> <ItemsPanelTemplate> <UniformGrid Columns="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorT

例如,我们有一个带有UnidormGrid的ListBox,就像ListBoxPanel一样

    <ListBox>
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Columns="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBox}, Path=Items.Count}"></UniformGrid>
                <!--<cntr:StackGrid Orientation="Horizontal" Direction="Normal"/>-->
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <Button>1</Button>
        <Button>2</Button>
        <Button>3</Button>
        <Button>4</Button>
    </ListBox>

1.
2.
3.
4.
ListBox将为UniformGrid提供一个无限大的值,但没有任何错误。UniformGrid将仅使用可见大小。它是怎么做到的?这将有助于我建立自己的小组


另外,我知道,我可以在列表框中禁用ScrollView,我的面板将获得可见的大小。

据我所知,
UniformGrid
通过它显示的最大子级导出其单元格大小。根据
方向
属性,当超过内容的宽度或高度时,它会将内容拆分为新行。默认情况下,它设置为
水平

这就引出了你的问题:为什么你认为它的宽度是无限的?当然,
ListBox
在其默认控件模板中包含一个
ScrollViewer
,但在我看来,它只为面板提供垂直无限空间(水平方向上,它被限制为列表框的宽度),这允许默认统一网格发生中断


如果您还有任何问题,请随时提问。

您可以阅读MSDN上的文章。它有一个关于自定义面板的部分。没有关于如何使用无限大的信息。从和中的备注部分:availableSize可以是从零到无穷大的任意数字。这不是一个错误,只是意味着面板可以布局其子级的大小不受约束。你只需要处理它。但是,您不能从MeasureOverride或ArrangeOverride返回无限大小。请注意:将UniformGrid的Columns属性绑定到ListBox的项计数没有多大意义。相反,您可以只为idea Rows=“1”设置
Rows=“1”
.Thx。更简单的方法是:-)