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 中工作,这可能会被视为一个问题。
我正在尝试将一个面板插入到我的 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 中工作,这可能会被视为一个问题。