我正在尝试将一个面板插入到我的WPF应用程序中,该面板会有一些非常具体的行为:
1。)均匀包装内容。从左上角开始向下运行,然后移动到下一列。
2.。)允许我定义要包装的最大列数。就我的目的而言,这个数字将在1到3之间。
3.。)允许我设置初始高度,但它也会增长以容纳其他项目。 (只设置一个初始高度,因为我的内容在没有它的情况下不会换行。如果我自动保留它,无论它是否适合屏幕,它都会出现在一个列中)
此时,我已经得出结论,我正在尝试做的事情将需要一个自定义面板,但我想在开始这个过程(并学习如何做)之前确保我不会错过更简单的答案。
答案 0 :(得分:1)
可以将WrapPanel
设置为垂直换行,但您无法控制列数。
UniformGrid
可让您控制列数,但不会垂直包裹。
简而言之:您需要一个自定义面板。内置的功能不能提供您想要的功能组合。
答案 1 :(得分:0)
UniformGrid具有 LayoutTransform 属性,可用于对其进行转换以更改内部元素的位置/旋转。但它也会改变内容。
在UniformGrid中的项目类型中涉及 Setters 的一些技巧,可以再次转换内容以保留所需的“原始”方向。
您可以在this tutorial了解详情。
或者,Extended WPF Toolkit似乎包含自己的UniformGrid实现,Orientation property,唯一的问题是它不会增长以容纳项目数;相反,它将服从任意列属性。
然后,您可以在每次添加新项目时调整此属性的值/调整UniformGrid的大小,但这将是一些更多的手动工作,并可能导致代码落后,这可能被视为如果你在MVVM工作,那就是一个问题。