Official documentation claims:
ItemWidth
每个项目中包含的每个项目的布局区域的宽度 ItemsWrapGrid。默认值为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的3rd party组件WrapPanel(在NuGet中进行搜索)来修复该错误。但是它的性能差,但不能超过5000个项目。
答案 0 :(得分:1)
实际上,这不是官方文档所说的“错误”。
ItemsWrapGrid
按行和列排列子级。因此,所有其他单元格都获得第一个单元格的宽度,如果不是那样,则您将没有行和列,因为不同的单元格将具有不同的高度和宽度,并将它们排列在行和列中会很复杂。
我想我知道您想要哪种类型的布局面板。名为FlowPane,我没有在UWP中找到此面板,但它们是exists in WinForms。
但是,您可以编写自己的布局以实现所需子代的排列。如果您了解basics of layout,那么编写流布局就不会有问题。
问题是,即使您编写自己的布局面板并将其用作ItemsPanel
之类的ItemsControl
的{{1}},也不会具有 virtualization 作为GridView
面板上有。如果ItemsWrapGrid
有很多项目,那就麻烦了。 ItemsRepeater
解决了虚拟化问题。因此,如果您要虚拟化,请使用它。
希望有帮助。
编辑:
我在社区工具包中找到了布局面板,它称为WrapPanel
: