Xaml 如何将ItemWidth设置为";“自动”;在ItemsWrapGrid中

Xaml 如何将ItemWidth设置为";“自动”;在ItemsWrapGrid中,xaml,uwp,Xaml,Uwp,: ItemWidth 列表中包含的每个项目的布局区域的宽度 项目在网格中。默认值为Double.NaN,这将导致“自动” 布局行为 这句话看起来不对,因为最简单的例子证明它是错的: <ListView> <ListView.ItemsPanel> <ItemsPanelTemplate> <ItemsWrapGrid Orientation="Vertical"/> </Ite

:

ItemWidth

列表中包含的每个项目的布局区域的宽度 项目在网格中。默认值为Double.NaN,这将导致“自动” 布局行为

这句话看起来不对,因为最简单的例子证明它是错的:

<ListView>
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <ItemsWrapGrid Orientation="Vertical"/>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListViewItem>One</ListViewItem>
    <ListViewItem>Two</ListViewItem>
    <ListViewItem>Little bit long Three</ListViewItem>
</ListView>

一个
两个
有点长的三个
这使得:

我可以手动设置宽度:

<ItemsWrapGrid Orientation="Vertical" ItemWidth="300"/>

但这不是我想要的。我希望ItemWidth自动调整为内容宽度。怎么做

UPD:解决方案(略)

看起来没有直接的简单解决方案,所以您可以使用Microsoft Community Toolkit中的第三方组件WrapPanel(在NuGet中搜索),而不是修复该漏洞。尽管5000件或5000件以上,它的性能很差。

实际上,官方文件所说的并不是“错”。
ItemsWrapGrid
按行和列排列子项。因此,所有其他单元格都得到第一个单元格的宽度,如果不是这样做的话,那么就不会有行和列,因为不同的单元格会有不同的高度和宽度,而将它们排列成行和列将相当复杂

我想我知道您想要什么类型的布局面板。它叫FlowPane,我在UWP中找不到这个面板,但是它们

但是,您可以编写自己的布局,以实现您想要的孩子的安排。如果你理解流程,写一个流程布局应该不会有问题。 问题是,即使您编写自己的布局面板并将其用作
ItemsControl
ItemsPanel
,比如
GridView
,您也不会像
ItemsWrapGrid
面板那样实现虚拟化。如果
ItemsControl
有很多项,那就麻烦了。虚拟化问题已通过解决。因此,如果您想要虚拟化,请使用它

希望有帮助

编辑:


我在社区工具包中找到了布局面板,它的名称是:

您尝试过这个解决方案吗?-我想解决没有第三方组件的问题,但我认为这是一个错误。UWP两天内的第二个bug我一直在学习这个平台。我是如此“幸运”还是它是超级马车平台?我决定返回WPF开发。5年后我会回到UWP。这怎么会是一个bug!!查看我编辑的答案,我找到了UWP的布局面板。我不知道为什么WrapPanel在方向=水平时工作良好,但如果我设置方向=垂直,它会将所有元素放在一个很长的列中。我试图禁用垂直滚动,但没有任何帮助。尽管UniformGrid按我的要求放置元素,但它无法处理5000个项目,只是变得没有响应。