WPF 将内容包装到最多 2 列中。平均分配

WPF Wrapping content into maximum 2 columns. Evenly distributed

我正在尝试将一个面板插入到我的 WPF 应用程序中,该面板将具有一些非常具体的行为:

1.) 均匀包裹内容。从左上角开始 运行 向下移动到下一列。

2.) 允许我定义要换行的最大列数。出于我的目的,这个数字将在 1 到 3 之间。

3.) 允许我设置初始高度,但它也会增长以容纳其他项目。 (只设置一个初始高度,因为没有它我的内容不会换行。如果我保持自动,无论它是否适合屏幕,它都会出现在一个单独的列中)

在这一点上,我得出结论,我正在尝试做的事情将需要一个自定义面板,但我想在开始该过程(并学习如何做)之前确保我不是缺少一个更简单的答案。

一个WrapPanel可以设置为垂直换行,但是你无法控制列数。

A UniformGrid 可以让您控制列数,但水平换行而不是垂直换行。

简而言之:您需要一个自定义面板。内置的不提供您想要的功能组合。

UniformGrid有一个LayoutTransform属性,可以用来对其进行变换,以改变里面元素的position/rotation。但它也会转换内容。

关于 UniformGrid 中项目类型的 Setters 的更多技巧,内容可以再次转换以保持所需的 "original" 方向。

您可以在 this tutorial 中了解更多信息。

或者,似乎 Extended WPF Toolkit contains its own implementation of UniformGrid, with an Orientation property,唯一的问题是它不会增长以容纳项目数量;相反,它将服从任意 Columns 属性.

然后,您可以在每次添加新的 item/resize UniformGrid 时更改此 属性 的值,但这将需要更多的手动工作,并且可能会导致代码隐藏,如果您在 MVVM 中工作,这可能会被视为一个问题。