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

时间:2015-01-22 12:45:18

标签: c# wpf containers

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

1。)均匀包装内容。从左上角开始向下运行,然后移动到下一列。

Example1

2.。)允许我定义要包装的最大列数。就我的目的而言,这个数字将在1到3之间。

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

Example2

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

2 个答案:

答案 0 :(得分:1)

可以将WrapPanel设置为垂直换行,但您无法控制列数。

UniformGrid可让您控制列数,但不会垂直包裹。

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

答案 1 :(得分:0)

UniformGrid具有 LayoutTransform 属性,可用于对其进行转换以更改内部元素的位置/旋转。但它也会改变内容。

在UniformGrid中的项目类型中涉及 Setters 的一些技巧,可以再次转换内容以保留所需的“原始”方向。

您可以在this tutorial了解详情。

或者,Extended WPF Toolkit似乎包含自己的UniformGrid实现,Orientation property,唯一的问题是它不会增长以容纳项目数;相反,它将服从任意属性。

然后,您可以在每次添加新项目时调整此属性的值/调整UniformGrid的大小,但这将是一些更多的手动工作,并可能导致代码落后,这可能被视为如果你在MVVM工作,那就是一个问题。